我正在尝试匹配像“23.0 32.0”这样的字符串。这是我的正则表达式:
hrs_pnt_regex = /\s{2,}-?\d{1,2}\.\d(\s+|$)/
代码:
x = " 23.0 32.0"
x.to_enum(:scan, hrs_pnt_regex).map { Regexp.last_match }
结果:
MatchData " 23.0 " 1:" "
我注意到的是 \s+ 最后似乎在括号中不起作用。如果我将其更改为“\s\s”,它会像这样匹配两个数字。否则我只得到第一个。
<MatchData " 23.0 " 1:" ">, <MatchData " 32.0" 1:"">
+ 不适用于 | 之后呢?
问题在于该(\s+|$)
部分正在消耗后续匹配识别起始部分所需的空间。你基本上是通过吞噬所有这些空间并将指针留3
在开始的位置来破坏你的下一轮32.0
。只要他们被认为是第一场比赛的一部分,他们就不能参加第二场比赛。
一个快速的解决方法是:
x.scan(/\s{2,}(-?\d{1,2}\.\d)/)
# => [["23.0"], ["32.0"]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句