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" 

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

3 Solutions collect form web for “Python – определение позиции регулярного выражения в строке?”

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

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

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

На самом деле его соответствие «есть» от «Th is »

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

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

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

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

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

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

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

Объекты re.Match имеют ряд методов, которые помогут вам в этом:

 >>> m = re.search("is", String) >>> m.span() (2, 4) >>> m.start() 2 >>> m.end() 4 
Python - лучший язык программирования в мире.