48 votes

Recherche d'expression régulière Python

J'essaie d'extraire toutes les occurrences de mots étiquetés d'une chaîne à l'aide de regex dans Python 2.7.2. Ou simplement, je veux extraire chaque morceau de texte à l'intérieur des balises [p][/p] Voici ma tentative :

 regex = ur"[\u005B1P\u005D.+?\u005B\u002FP\u005D]+?"
line = "President [P] Barack Obama [/P] met Microsoft founder [P] Bill Gates [/P], yesterday."
person = re.findall(pattern, line)

L'impression person produit ['President [P]', '[/P]', '[P] Bill Gates [/P]']

Quelle est la bonne regex à obtenir : ['[P] Barack Obama [/P]', '[P] Bill Gates [/p]'] ou ['Barrack Obama', 'Bill Gates'] .

16voto

FailedDev Points 15104

Essaye ça :

    for match in re.finditer(r"\[P[^\]]*\](.*?)\[/P\]", subject):
        # match start: match.start()
        # match end (exclusive): match.end()
        # matched text: match.group()

4voto

Blair Points 6090

Votre question n'est pas claire à 100 %, mais je suppose que vous voulez trouver chaque morceau de texte dans les balises [P][/P]

 >>> import re
>>> line = "President [P] Barack Obama [/P] met Microsoft founder [P] Bill Gates [/P], yesterday."
>>> re.findall('\[P\]\s?(.+?)\s?\[\/P\]', line)
['Barack Obama', 'Bill Gates']

2voto

Sohn Points 168

Utilisez ce modèle,

pattern = '\[P\].+?\[\/P\]'

Vérifiez ici

2voto

pram Points 645

vous pouvez remplacer votre modèle par

 regex = ur"\[P\]([\w\s]+)\[\/P\]"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X