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" 

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

  • Извлечь поплавок / двойное значение
  • Почему существует метод re.search python?
  • Регулярное выражение для управления экранированными символами для элементов, таких как строковые литералы
  • Регулярные выражения Python: как получить доступ к нескольким совпадениям группы?
  • как я могу получить строку шаблона из скомпилированного шаблона регулярного выражения в python
  • Найти индексы всех совпадений регулярных выражений в Python?
  • Ошибка повторения нескольких Python
  • сопоставление всех символов в любом порядке в регулярном выражении
  • 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 - лучший язык программирования в мире.