REGEX-Repérer des chaînes simples à la sauce Python
Bonjour,
le code suivant contient un début de regex pour chercher des regexs à la sauce Python.
Cela ne fonctionne pas. J'ai mis des tests montrant les problèmes avec la regex utilisée.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #! /usr/bin/env python3
# Source : http://www.developpez.net/forums/d1173336/autres-langages/python-zope/general-python/regex-recuperer-contenu-entre-guillemets-possibilite-dutiliser/#post6443734
import re
# ``(...)`` sert à grouper des directives.
# ``.`` indique n'importe quel caractère.
# ``.*`` indique une suite éventuellement vide
# de caractères quelconques.
# ``?<!...`` demande de vérifier que le caractère
# en cours d'analyse n'est pas précédé de ...
PATTERN = re.compile(r'"(.*?)(?<!\\)"')
someTexts = [
r'Un petit texte et "autre chose \"entre des guillemets\" pour tester"' \
+ ' et voilà c\'est fini...',
# OK
r'Un petit texte et "et attention à ""r...',
# OK
r'Un petit texte et "et attention à \\"r...',
# PAS OK : Chaîne bien fermée mais ce n'est pas vu
# car ``\"`` est échapée alors que ``\\`` c'est qu'il est.
r'Un petit texte et "et attention à \"r...',
# OK
r'Un petit texte et "et attention à \\""r...',
# PAS OK : Chaîne fermée au mauvais endroit
# car ``\"`` est échapée alors que ``\\`` c'est qu'il est.
r'Un petit texte et "et attention à \""r...',
# OK
]
for oneText in someTexts:
search = re.search(PATTERN, oneText)
print('---', oneText, sep="\n")
if search:
s = search.start()
e = search.end()
print(oneText[:s], oneText[s:e], oneText[e:], sep = ">>>")
else:
print('<< NOTHING FOUND ! >>') |