4

我需要匹配以下字符串中的数字。它们可能是其中包含其他数字的较长字符串的一部分,因此我特别想匹配紧跟在文本“错误代码”后面的空格之后出现的数字

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],但我无法正确使用正则表达式。

4

4 回答 4

18
/(?:Error Code )[0-9]+/

这使用了一个非捕获组(并非在所有正则表达式实现中都可用。)它会说,嘿,字符串最好有这个短语,但我不希望这个短语成为我匹配的一部分,只是后面的数字。

如果您只想匹配 1 到 3 位数字:

/(?:Error Code )[0-9]{1,3}/

使用 Ruby,您的正则表达式应该会遇到很少的限制。除了条件之外,Ruby 的正则表达式并没有什么不能做的。

于 2013-01-15T18:24:36.897 回答
8

给定字符串“错误代码 190”,这将返回“190”,而不是像此处提供的其他正则表达式示例那样返回“错误代码”。

(?<=Error Code.*)[0-9]
于 2013-01-15T18:50:02.323 回答
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"]
于 2013-01-15T18:41:54.313 回答
0

您可以使用此正则表达式:仅数字,从 1 计数到 3:

regexp = "^\\d{1,3}$"
于 2015-10-12T14:37:13.683 回答