J'essaie d'extraire toutes les occurrences de mots marqués d'une chaîne en utilisant regex dans Python 2.7.2. Ou simplement, je veux extraire chaque morceau de texte à l'intérieur du [p][/p]
Mots clés. 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 regex correcte à obtenir: ['[P] Barack Obama [/P]', '[P] Bill Gates [/p]']
ou ['Barrack Obama', 'Bill Gates']
.
Merci. :)
import re
regex = ur"\[P\] (.+?) \[/P\]+?"
line = "President [P] Barack Obama [/P] met Microsoft founder [P] Bill Gates [/P], yesterday."
person = re.findall(regex, line)
print(person)
les rendements
['Barack Obama', 'Bill Gates']
La regex ur"[\u005B1P\u005D.+?\u005B\u002FP\u005D]+?"
est exactement le même unicode que u'[[1P].+?[/P]]+?'
sauf plus difficile à lire.
Le premier groupe entre crochets [[1P]
indique à re que l’un des caractères de la liste ['[', '1', 'P']
devrait correspondre, de même que le deuxième groupe entre crochets [/P]]
Ce n'est pas ce que vous voulez du tout. Alors,
1
devant P
.)[P]
, échappe aux crochets avec une barre oblique inverse: \[P\]
..+?
.Essaye ça :
for match in re.finditer(r"\[P[^\]]*\](.*?)\[/P\]", subject):
# match start: match.start()
# match end (exclusive): match.end()
# matched text: match.group()
Votre question n’est pas claire à 100%, mais je suppose que vous voulez trouver chaque élément de texte entre 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']
vous pouvez remplacer votre motif par
regex = ur"\[P\]([\w\s]+)\[\/P\]"