Не используйте re.escape
, который добавляет нежелательные обратные слеши:
re.escape (pattern)
Экранирование специальных символов в шаблоне. Это полезно, если вы хотите сопоставить произвольную литеральную строку, в которой могут быть метасимволы регулярного выражения.
Использование re.escape в вашем первом регулярном выражении превращает его в United\\s\+Kingdom
, который попытается сопоставитьбуквально \
, за которым следует s
между United
и Kingdom
.
. Без него ваш код работает, как и ожидалось:
import re
x_3 = "United Kingdom"
txt_to_srch = """Monty Pythons come from United Kingdom. They do.
United Kingdom is their home. Yes.
United Kingdom"""
x_3 = '\s+'.join(x_3.split(" "))
x_3 = r"\b" + x_3 +r"\b"
# print(x_3)
# \bUnited\s+Kingdom\bx2 = re.compile(x_3,re.IGNORECASE)
txt_to_srch = re.sub(r'\n',' ',txt_to_srch)
txt_to_srch = re.sub(r'\r',' ',txt_to_srch)
txt_to_srch = re.sub(r'\t',' ',txt_to_srch)
y = re.findall(x2,txt_to_srch)
print(y)
# ['United Kingdom', 'United Kingdom', 'United Kingdom']