Python Regex - получить слова вокруг матча - PullRequest
3 голосов
/ 05 октября 2019

Я хочу получить слова до и после моего матча. Я мог бы использовать string.split(' ') - но поскольку я уже использую регулярное выражение, разве нет лучшего способа использования только регулярного выражения?

Используя объект соответствия, я могу получить точное местоположение. Однако это местоположение индексируется символом.

import re

myString = "this. is 12my90\nExample string"
pattern = re.compile(r"(\b12(\w+)90\b)",re.IGNORECASE |  re.UNICODE)

m = pattern.search(myString)
print("Hit: "+m.group())
print("Indix range: "+str(m.span()))
print("Words around match: "+myString[m.start()-1:m.end()+1]) # should be +/-1 in _words_, not characters

Вывод:

Hit: 12my90 Indix

диапазон: (9, 15)

Слова вокруг совпадения: 12my90

Для получения соответствующего слова и слова перед этим я попытался:

pattern = re.compile(r"(\b(w+)\b)\s(\b12(\w+)90\b)",re.IGNORECASE | 
re.UNICODE)

Что не дает совпадений.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Во втором паттерне вы должны экранировать w+, как \w+.

Кроме того, в вашем примере есть новая строка, которую вы можете сопоставить, используя еще один следующий \s

Ваш шаблон с 3 группами захвата может выглядеть следующим образом:

(\b\w+\b)\s(\b12\w+90\b)\s(\b\w+\b)

Regex demo

Вы можете использовать группы захвата для получения значений

print("Words around match: " + m.group(1) + " " + m.group(3))
0 голосов
/ 05 октября 2019

Символ новой строки отсутствует

regx = r"(\w+)\s12(\w+)90\n(\w+)"

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