Peyon regex findall
Я пытаюсь извлечь все вхождения помеченных слов из строки с использованием regex в Python 2.7.2. Или просто, я хочу извлечь каждую часть текста внутри тегов [p][/p]
.
Вот моя попытка:
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)
Печать person
создает ['President [P]', '[/P]', '[P] Bill Gates [/P]']
Какое правильное регулярное выражение получится: ['[P] Barack Obama [/P]', '[P] Bill Gates [/p]']
или ['Barrack Obama', 'Bill Gates']
.
Спасибо.:)
Ответы
Ответ 1
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)
дает
['Barack Obama', 'Bill Gates']
Регулярное выражение ur"[\u005B1P\u005D.+?\u005B\u002FP\u005D]+?"
точно такое же
unicode как u'[[1P].+?[/P]]+?'
, за исключением более трудного для чтения.
Первая группа в скобках [[1P]
сообщает re, что любой из символы в списке ['[', '1', 'P']
должны совпадать и аналогично со второй группой [/P]]
. Это не то, что вы хотите вообще. Таким образом,
- Снимите внешние квадратные скобки. (Также удалите
блуждающий
1
перед P
.)
- Чтобы защитить литеральные скобки в
[P]
, уберите скобки с помощью
обратная косая черта: \[P\]
.
- Чтобы вернуть только те слова внутри тегов, скопируйте скобки
вокруг
.+?
.
Ответ 2
Попробуйте следующее:
for match in re.finditer(r"\[P[^\]]*\](.*?)\[/P\]", subject):
# match start: match.start()
# match end (exclusive): match.end()
# matched text: match.group()
Ответ 3
Ваш вопрос не на 100% ясен, но я предполагаю, что вы хотите найти каждый фрагмент текста внутри тегов [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']
Ответ 4
вы можете заменить свой шаблон
regex = ur"\[P\]([\w\s]+)\[\/P\]"
Ответ 5
Используйте этот шаблон,
pattern = '\[P\].+?\[\/P\]'
Отметьте здесь