1

我有这段文字:-

SOME text, .....
Number of successes: 3556
Number of failures: 22
Some text, .....
Number of successes: 2623
Number of failure: 0

我的要求是找到此模式“成功次数:(\d+)”的第一次出现,即成功次数:3556。但上面的表达式也返回后续匹配项。

我希望正则表达式为我执行此操作,这与我可以使用循环进行迭代的 java 不同。

任何人都可以帮助我使用只能找到第一次出现的正则表达式。

4

3 回答 3

7

一种适用于任何语言的解决方案:

(?s)\A(?:(?!Number of successes:).)*Number of successes: (\d+)

解释:

(?s)                      # Turn on singleline mode
\A                        # Start of string
(?:                       # Non-capturing group:
 (?!Number of successes:) # Unless this text intervenes:
 .                        # Match any character.
)*                        # Repeat as needed.
Number of successes:[ ]   # Then match this text
(\d+)                     # and capture the following number

在 regex101.com 上实时查看。

于 2013-11-18T06:14:17.483 回答
0

万一通过正则表达式的要求不是真正的要求,这里是蒂姆(仅使用正则表达式)的(好)方法的替代方案

awk ' $0~/Number of successes: [1-9][0-9]*/ { print $0 ; exit 0 ;}'

或者真的很简单

grep 'Number of successes: [1-9][0-9]*' | head -1

我更喜欢 awk 一个,因为它一看到第一个匹配就退出而第二个可以处理它之后的许多行(直到它收到 SIGPIPE 或文件结尾)

于 2013-11-18T10:13:13.160 回答
0

尝试使用grepwith-m选项

grep -m 1 'Number of successes: [0-9]\+' file
于 2013-11-18T10:25:04.647 回答