我有这样的文字: -
SOME text, .....
Number of successes: 3556
Number of failures: 22
Some text, .....
Number of successes: 2623
Number of failure: 0
我的要求是找到这种模式的第一次出现“成功次数:(\ d +)”,即成功次数:3556。 但是上面的表达式也会返回后续匹配。
我希望正则表达式为我做这个,不像在java中我可以使用循环来迭代。
任何人都可以帮助我使用只能找到第一次出现的正则表达式。
答案 0 :(得分: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
答案 1 :(得分:0)
以防万一通过regexp执行此操作的要求并不是必需的,以下是Tim(仅使用regexp)的(好)方法的替代方法
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或文件结尾)
答案 2 :(得分:0)
尝试将grep
与-m
选项
grep -m 1 'Number of successes: [0-9]\+' file