Maison  >  Article  >  développement back-end  >  Comment extraire les correspondances entre deux chaînes dans les journaux avec une expression régulière ?

Comment extraire les correspondances entre deux chaînes dans les journaux avec une expression régulière ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 22:17:02806parcourir

How to Extract Matches Between Two Strings in Logs with a Regex?

Regex pour extraire les correspondances entre deux chaînes

Étant donné un fichier journal volumineux contenant des chaînes multilignes entourées de marqueurs de début et de fin spécifiques, le l'objectif est d'extraire et d'imprimer uniquement les chaînes les plus courtes. Cependant, le marqueur de début est utilisé ailleurs dans le fichier, donc une simple regex ne suffira pas.

Pour résoudre ce problème, nous pouvons utiliser l'expression régulière suivante :

(start((?!start).)*?end)

Cette regex correspond des chaînes qui :

  • Commencez par "start" suivi de caractères qui ne contiennent pas "start".
  • Terminez par "end".

Utilisation Méthode re.findall de Python avec le modificateur de ligne unique (re.S), nous pouvons récupérer toutes ces chaînes à partir du fichier d'entrée :

<code class="python">import re

text = """
start spam
start rubbish
start wait for it...
    profit!
here end
start garbage
start second match
win. end
"""

matches = re.findall('(start((?!start).)*?end)', text, re.S)
print(matches)</code>

Cela affichera le résultat souhaité :

['start wait for it...
    profit!
here end', 'start second match
win. end']

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn