正则表达式或通配符不匹配

mj_

我正在尝试匹配像“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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章