我需要匹配以下字符串中的数字。它们可能是较长字符串的一部分,其中包含其他数字,因此我特别希望匹配在“错误代码”文本后面的空格后直接出现的数字:
Error Code 0 # Match = 0
Error Code 45 # Match = 45
Error Code 190 # Match = 190
也可能:
Some Words 12 Error Code 67 Some Words 77 # Match = 67
我正在使用someString.match(regEx)[0]
,但我无法正确使用正则表达式。
答案 0 :(得分:18)
/(?:Error Code )[0-9]+/
这使用非捕获组(在所有正则表达式实现中都不可用。)它会说,嘿String更好地有这个短语,但我不希望这个短语成为我的匹配的一部分,只是数字那个跟随。
如果您只想要匹配1到3位数字:
/(?:Error Code )[0-9]{1,3}/
使用Ruby,你的正则表达式应该受到很少的限制。除了条件之外,没有太多Ruby的正则表达式无法做到。
答案 1 :(得分:6)
给定字符串“Error Code 190”,这将返回“190”而不是“Error Code”,就像这里提供的另一个正则表达式一样。
(?<=Error Code.*)[0-9]
答案 2 :(得分:4)
我使用以下正则表达式:
/Error\sCode\s\d{1,3}/
或者,使用命名组:
/Error\sCode\s(?<error_code>\d{1,3})/
最后一个将捕获命名组下的错误代码,即数字。请注意\s
匹配空格,但除非指定了x标志,否则它是不必要的。您可以访问这样的匹配捕获:
str = "Error Code 0\nError Code 45\nError Code 190"
error_codes = str.lines.map{|l|l.match(regex)[:error_code]}
#=> ["0", "45", "190"]
答案 3 :(得分:0)
你可以使用这个正则表达式: 只有数字,从1到3计数:
regexp = "^\\d{1,3}$"