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

DDD
Libérer: 2024-10-24 02:56:29
original
354 Les gens l'ont consulté

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>
Copier après la connexion

Sortie :

start wait for it...
    profit!
here end
start second match
win. end
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal