Подтвердить что ты не робот

Python - определение позиции регулярного выражения в строке?

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

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

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

1 match found: "This is an example sentence"

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

4b9b3361

Ответ 1

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

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

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

Собственно, его соответствие "есть" от "Th is"

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

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

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

Ответ 2

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

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

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

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