1

私はこのテキストを持っています:-

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

私の要件は、成功の数: 3556 であるこのパターン「成功の数: (\d+)」の最初の出現を見つけることです。ただし、上記の式は後続の一致も返します。

ループを使用して反復できるJavaとは異なり、正規表現でこれを実行したいと考えています。

最初の出現のみを見つけることができる正規表現で誰かが私を助けてくれますか?

4

3 に答える 3

7

どの言語でも機能するはずの1つのソリューション:

(?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

正規表現を介してそれを行う要件が実際には要件ではない場合に備えて、Tim (正規表現のみを使用する) による (素敵な) アプローチの代替案を次に示します。

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

または本当に単純な

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

最初の一致を確認するとすぐに終了するため、awkの方がはるかに好きですが、2番目のものはその後(SIGPIPEまたはファイルの終わりを受け取るまで)多くの行を処理できます

于 2013-11-18T10:13:13.160 に答える
0

オプションで使っgrepてみる-m

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