鉴于此字符串:
stuff = "banana 11/12/2009 123"
如何在ruby .scan调用中获取正则表达式只返回:
["123"]
在ruby中我使用了stuff.scan(/\b\d+\b/)
但是意识到\ b边界将反斜杠视为边界,所以我从方法返回[“11”,“12”,“2009”,“123”] 。此外,我需要扫描处理以下内容,只返回“123”:
stuff = "123 banana 11/12/2009"
stuff = "11/12/2009 banana 123"
任何想法? :)
答案 0 :(得分:2)
你可以使用这种模式:
/(?<=\s|^)\d+(?=\s|$)/
答案 1 :(得分:2)
您也可以使用:
(?<!\S)\d+(?!\S)
相当于(但略短):
(?<=\s|^)\d+(?=\s|$)
匹配\d+
,其周围有空格,或字符串(或行)的开头/结尾。
答案 2 :(得分:2)
您还可以尝试更易读的分割/选择解决方案,该解决方案仅查找空格分隔文本部分中的数字。
stuff.split.select { |x| x =~ (/^\d+$/)}
答案 3 :(得分:1)
(?<!/)\b\d+\b(?!/)
如果使用/
作为分隔符
(?<!\/)\b\d+\b(?!\/)
演示:http://rubular.com/r/P9MjQ87csO
注意:如果您一直使用/
正则表达式,那么我建议您考虑更改分隔符。根据{{3}},您可以这样做:
mystring =~ %r{(?<!/)\b\d+\b(?!/)}
再也不用担心向前斜线了。见this dailyvim post
答案 4 :(得分:1)
答案 5 :(得分:0)
如何试图否定/?
stuff.scan(/[^\/]*\d[^\/]*/)