如何在分隔符/多个分隔符之间获得的子字符串?例如:
Dim Regex As RegExp
Dim Matches As MatchCollection
Set Regex = New RegExp
Regex.Pattern = "\d*\.\d*"
Regex.Global = True
Set Matches = Regex.Execute("77.170 (+/- 0.025)")
MsgBox (Matches(0).Value & " " & Matches(1).Value)
我尝试过使用split,但是有一个优雅的解决方案吗?
答案 0 :(得分:5)
答案 1 :(得分:0)
我认为这很优雅:
str.split(delim, -1)[1...-1].reject(&:empty?)
与anubhava的答案不同,这甚至适用于多字符分隔符。 -1
的{{1}}参数阻止它抑制尾随空字段,这是必需的,因为您需要知道字符串是否以分隔符结尾。
split
答案 2 :(得分:0)
其他几种方式:
1:修剪字符串并使用String#scan
def some_method(str, c)
str.gsub(/^[^#{c}]+|[^#{c}]+$/,"").scan /[^#{c}]+/
end
some_method("00990099", "9") #=> ["00"]
some_method("00XXX00XX0X00X00", "X") #=> ["00", "0", "00"]
some_method("0000", "9") #=> []
some_method("9999", "9") #=> []
2:分组并使用Enumerable#each_cons
def some_method(str, c)
str.gsub(r) split(/(#{c}+)/)
.each_cons(3)
.with_object([]) { |(_,s,_),a| a << s unless s =~ /#{c}/ }
end
some_method("00990099", "9") #=> ["00"]
some_method("00XXX00XX0X00X00", "X") #=> ["00", "0", "00"]
some_method("0000", "9") #=> []
some_method("9999", "9") #=> []
请注意,使用String#split时,正则表达式中的#{c}+
必须位于捕获组中,以保留c
被分割的str
组。