RegEx或与Wildcard不匹配

时间:2017-10-17 18:40:59

标签: ruby regex

我正在尝试匹配像“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 +最终似乎不适用于parens。如果我将其更改为“\ s \ s”,它会匹配这两个数字。否则我只得到第一个。

<MatchData "    23.0  " 1:"  ">, <MatchData "   32.0" 1:"">

+不适用于|之后呢?

2 个答案:

答案 0 :(得分:1)

问题是return false部分消耗了后续匹配需要识别起始部分的空间。你基本上是通过吞噬所有空间并将指针留在(\s+|$)开头的3位置来破坏你的下一轮。只要他们被认为是第一场比赛的一部分,他们就不会在第二场比赛中出现。

快速解决方法是:

32.0

答案 1 :(得分:0)

这里最好的办法是使用在线Regex Matcher。我最喜欢的是RegExr

我可以从您的描述中看出,您希望将数字与xx.y匹配,在这种情况下

hrs_pnt_regex = /\d{2,}\.\d{1,2}/

将匹配两个集23.032.0