如何创建reqular表达式以匹配字符串开头和结尾没有数字的所有数字?

时间:2016-03-13 18:30:38

标签: ruby regex

示例代码:

test = '12asiudas8787hajshd986q756tgs87ta7d6-12js01'
test.scan(regexp)

结果,我应该得到:

["8787", "986", "756", "87", "7", "6", "12"]

与使用/\d+/正则表达式相似,但在字符串的开头和结尾没有数字,在本例中为12和01。

3 个答案:

答案 0 :(得分:1)

要匹配 中的数字,请使用以下正则表达式。

正则表达式: (?<=[^\d])(\d+)(?=[^\d])

<强>解释

  • (?<=[^\d])将确保其后面没有数字。如果没有此2的{​​{1}}开头也会匹配,我们也不想这样做。

  • 12与您的号码相符。

  • (\d+)将确保最后一位数字后面没有数字。如果没有此(?=[^\d]) 0,也会匹配。

P.S:Wiktor Stribiżew's建议

上编辑正则表达式

也可以使用01代替\D。我使用[^\d]来说清楚。

Regex101 Demo

Edited Regex101 Demo

答案 1 :(得分:1)

test.scan(/(?<=\D)\d+(?=\D)/) # => ["8787", "986", "756", "87", "7", "6", "12"]

答案 2 :(得分:0)

这应该做:

test.scan(/(?<=[^\d])(\d+)(?=[^\d])/).flatten