如何扫描字符串是否出现一位或两位数的整数

时间:2016-12-08 20:25:10

标签: ruby regex

使用Ruby String#scan我想摘录自:

"8 12 13.5 145 foobar-123F 0.33 10"

这些结果:

['8', '12', '10']

但没有别的。

2 个答案:

答案 0 :(得分:5)

如果您想要一个纯正的基于正则表达式的解决方案:

/(?<=\s|\A)\d{1,2}(?=\s|\Z)/

这使用正向lookbehind和正向前瞻来检查数字组是否仅被分隔符包围。

但是,我要做的是使用String#split对字符串进行标记,并过滤掉包含非数字字符的标记。在我看来,这会使代码更具可读性。例如:

s = "8 12 13.5 145 foobar-123F 0.33 10"
s.split.select { |token| token =~ /\A\d{1,2}\Z/ }
=> ["8", "12", "10"]

答案 1 :(得分:2)

您可以使用字边界和外观:

> "8 12 13.5 145 foobar-123F 0.33 10".scan(/(?<!\.)\b\d{1,2}\b(?!\.)/)
=> ["8", "12", "10"]

排除负数:

> "8 12 13.5 145 foobar-123F 0.33 10 -12".scan(/(?<![.\-])\b\d{1,2}\b(?!\.)/)
=> ["8", "12", "10"]