Python - Нахождение позиции соответствия регулярного выражения в строке? - PullRequest
40 голосов
/ 20 апреля 2010

В настоящее время я использую регулярные выражения для поиска в RSS-каналах, чтобы найти, упоминаются ли определенные слова и фразы, и затем хотел бы также извлечь текст с обеих сторон совпадения. Например:

String = "This is an example sentence, it is for demonstration only"
re.search("is", String)

Я хотел бы знать позицию (ы), где находятся совпадения 'is', чтобы я мог извлечь и вывести что-то вроде этого:

1 match found: "This is an example sentence"

Я знаю, что это было бы легко сделать с разбиениями, но мне нужно знать, какой индекс первого символа совпадения был в строке, и я не знаю, как найти

Ответы [ 4 ]

60 голосов
/ 20 апреля 2010

Вы можете использовать .find("is"), он вернет позицию "is" в строке

или используйте .start () из re

>>> re.search("is", String).start()
2

На самом деле его совпадение "is" из "Th is "

Если вам нужно сопоставить каждое слово, вы должны использовать \b до и после "is", \b - граница слова.

>>> re.search(r"\bis\b", String).start()
5
>>>

для получения дополнительной информации о регулярных выражениях python, docs здесь

33 голосов
/ 03 мая 2013

Я не думаю, что на этот вопрос еще полностью ответили, потому что все ответы дают только примеры совпадений. Вопрос ОП демонстрирует нюансы наличия 2 совпадений, а также совпадения подстрок, о которых не следует сообщать, поскольку это не слово / токен.

Чтобы сопоставить несколько вхождений, можно сделать что-то вроде этого:

iter = re.finditer(r"\bis\b", String)
indices = [m.start(0) for m in iter]

Это вернет список двух индексов для исходной строки.

20 голосов
/ 20 апреля 2010

re.Match У объектов есть несколько способов , чтобы помочь вам в этом:

>>> m = re.search("is", String)
>>> m.span()
(2, 4)
>>> m.start()
2
>>> m.end()
4
0 голосов
/ 17 ноября 2018

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:
Приведенное выше решение является хорошим, но вы можете получить ошибку, подобную этой 'NoneType' object has no attribute 'span', соблюдайте осторожность. Может произойти сбой программы. Ошибка появляется из-за того, что шаблон не найден в строке
РЕШЕНИЕ
if obj: print obj.span()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...