J'ai obtenu de l'aide avec cela plus tôt aujourd'hui mais je n'arrive pas à comprendre la dernière partie du problème que j'ai. Cette recherche regex renvoie toutes les correspondances dans le fichier ouvert de l'entrée. Ce que je dois faire est également de trouver quelle partie du fichier provient de la correspondance.python regex recherche d'ajouter une balise dans un fichier texte
Chaque section est ouverte et fermée avec une étiquette. Par exemple, l'un des tags s'ouvre avec <opera>
et se termine par </opera>
. Ce que je veux être en mesure de faire, c'est quand je trouve une correspondance que je veux soit revenir en arrière à la balise ouverte ou en avant à la balise de fermeture et inclure le contenu de la balise, dans ce cas "opéra" dans la sortie. Ma question est que je peux le faire avec un ajout à l'expression régulière ou y a-t-il un meilleur moyen? Voici le code que j'ai qui fonctionne très bien déjà:
text = open_file.read()
#the test string for this code is "NNP^CC^NNP"
grammarList = raw_input("Enter your grammar string: ");
tags = grammarList.split("^")
tags_pattern = r"\b" + r"\s+".join(r"(\w+)/{0}".format(tag) for tag in tags) + r"\b"
# gives you r"\b(\w+)/NNP\s+(\w+)/CC\s+(\w+)/NNP\b"
from re import findall
print(findall(tags_pattern, text))
Merci mathématique.coffee. Je pense que c'est une idée réalisable mais elle renvoie une erreur disant que le callable-itérateur n'a pas de len(). Je me sens comme si cela pouvait être plus facile d'utiliser les expressions régulières, non? J'ai le plus gros problème en ce moment, c'est la regex que j'ai en cours d'exécution que je ne comprends pas complètement. Ne pourrais-je pas simplement ajouter une chaîne de recherche à la regex qui demande ce qui est après le "" suivant et avant le ">" suivant? Cela me donnerait l'étiquette, non? Mon problème est que je ne sais pas comment faire cela. –
Bien, vous pourriez avoir la regex étant une variation de ' (? =. *? Your_search_regex)' mais le problème est s'il peut y avoir plusieurs occurrences de votre tag regex dans chaque section, alors cela n'en prendra qu'un. –