Question

J'ai ce texte :-

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

Mon exigence est de trouver la première occurrence de ce modèle "Nombre de succès:(\d+)", qui est le Nombre de succès:3556.Mais l'expression ci-dessus renvoie les correspondances ultérieures ainsi.

Je veux l'expression régulière pour ce faire, pour moi, contrairement à java où je peux utiliser la boucle pour parcourir.

Quelqu'un peut m'aider avec une expression régulière qui peut trouver la première occurrence uniquement.

Était-ce utile?

La solution

Une solution qui devrait fonctionner dans n'importe quelle langue:

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

Explication:

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

Voir It en direct sur REGEX101.COM .

Autres conseils

Juste au cas où les exigences de le faire via REGEXP n'est pas vraiment une exigence, voici des alternatives à l'approche (Nice) de Tim (qui utilise uniquement la REGEXP)

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

ou le vraiment simple

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

Je préfère beaucoup l'awk one, car il cesse dès que il voit le premier match, alors que le 2e on pourrait traiter de nombreuses lignes après elle (jusqu'à ce qu'elle reçoive le Sigpipe ou la fin du fichier)

Essayez d'utiliser grep avec -m option

grep -m 1 'Number of successes: [0-9]\+' file
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top