Je suis supposé capturer tout à l'intérieur d'un tag et les lignes suivantes après, mais il est supposé s'arrêter la prochaine fois qu'il rencontre un crochet. Qu'est-ce que je fais mal?Mon regex en python n'est pas récursif correctement
import re #regex
regex = re.compile(r"""
^ # Must start in a newline first
\[\b(.*)\b\] # Get what's enclosed in brackets
\n # only capture bracket if a newline is next
(\b(?:.|\s)*(?!\[)) # should read: anyword that doesn't precede a bracket
""", re.MULTILINE | re.VERBOSE)
haystack = """
[tab1]
this is captured
but this is suppose to be captured too!
@[this should be taken though as this is in the content]
[tab2]
help me
write a better RE
"""
m = regex.findall(haystack)
print m
ce que im essayant d'obtenir est:
[('tab1', « ceci est capturé \ nmais cela est supposé être capturé trop \ n @ [cela devrait être pris que comme cela! est dans le contenu] \ n », '[tab2]', 'aide-moi \ nwrite un meilleur RE \ n')]
modifier:
regex = re.compile(r"""
^ # Must start in a newline first
\[(.*?)\] # Get what's enclosed in brackets
\n # only capture bracket if a newline is next
([^\[]*) # stop reading at opening bracket
""", re.MULTILINE | re.VERBOSE)
cela semble fonctionner mais il coupe aussi les parenthèses insid e le contenu
merci pour la réponse, je vois, je l'ai bien essayé le récursif (R?), Mais vous avez raison, il est pas vraiment travailler en python alors savez-vous un moyen pour moi de le faire afin que je puisse réaliser ce que je suis en train de faire? – cybervaldez
Im ayant un problème, il semble s'arrêter quand il y a une parenthèse à l'intérieur du contenu aussi bien. Comment puis-je le faire afin qu'il s'arrête seulement quand il trouve un [crochet sur le début de la ligne seulement. [tab1] – cybervaldez
Merci, cette question a été très instructive car beaucoup de détails et d'alternatives sont apparus. Je suis assez surpris de voir à quel point les choses sont vraiment différentes de votre première solution. Je n'ai pas l'idée de pourquoi ma solution n'a pas fonctionné: (^ [\ n \ [] *), n'est-ce pas lu pour arrêter quand il y a un [crochet après un retour à la ligne? pourquoi ça ne marche pas? c'est juste pour la matière à réflexion, votre réponse fonctionne parfaitement déjà. – cybervaldez