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 :
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 :
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!