Maison  >  Article  >  développement back-end  >  Comment extraire les correspondances les plus courtes entre deux chaînes en Python avec Regex ?

Comment extraire les correspondances les plus courtes entre deux chaînes en Python avec Regex ?

DDD
DDDoriginal
2024-10-24 02:56:29267parcourir

How to Extract Shortest Matches Between Two Strings in Python with Regex?

Extraire les correspondances les plus courtes entre deux chaînes

Lorsque vous traitez des fichiers journaux volumineux, extraire des données spécifiques entre deux chaînes peut être un défi. La tâche devient plus complexe lorsque les chaînes de début et de fin apparaissent plusieurs fois dans le fichier et que le résultat souhaité implique les correspondances les plus courtes.

Solution Regex

Pour résoudre ce problème , une approche d'expression régulière peut être utilisée. L'expression régulière idéale capturerait le texte entre les chaînes de début et de fin et donnerait la priorité aux correspondances les plus courtes.

L'expression régulière fournie, (start((?!start).)*?end), répond à ces critères :

  • start correspond exactement à la chaîne de départ.
  • ((?!start).)*? correspond à n'importe quel caractère sauf start à plusieurs reprises, en utilisant un quantificateur paresseux *? pour prioriser les correspondances les plus courtes.
  • end correspond exactement à la chaîne de fin.

Implémentation à l'aide de Python

En Python, le module re propose le fonctions nécessaires pour appliquer cette regex. Le code ci-dessous montre comment extraire les correspondances les plus courtes à l'aide de re.findall :

<code class="python">import re

text = "start spam\nstart rubbish\nstart wait for it...\n    profit!\nhere end\nstart garbage\nstart second match\nwin. end"

matches = re.findall('(start((?!start).)*?end)', text, re.S)

for match in matches:
    print(match)</code>

Sortie :

start wait for it...
    profit!
here end
start second match
win. end

Considérations supplémentaires pour les fichiers volumineux

Pour les fichiers exceptionnellement volumineux (par exemple 2 Go), l'efficacité devient cruciale. L'optimisation suivante peut être appliquée :

  • Utilisez une approche basée sur la mémoire tampon pour éviter de lire l'intégralité du fichier en mémoire.
  • Utilisez des indicateurs de moteur d'expression régulière comme re.MULTILINE pour gérer plusieurs entrées de ligne.

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