Чтобы захватить только слова, написанные заглавными буквами и между словами begin
и end
, используйте это регулярное выражение:
.*begin|end.*|[^e]*?\b([A-Z]{2,})\b
См. Онлайн-демонстрацию
Когда вы заменяете end
другим словом, обязательно замените e
в [^e]*?
части первой буквой этого нового слова, например, если вы хотите заменить end
на Stop
, тогда также замените [^e]*?
на [^S]*?
.
Для рассматриваемого примера это регулярное выражение становится следующим:
.*Treatments|Physical examination.*|[^P]*?\b([A-Z]{2,})\b
См. онлайн-демонстрацию
Примечание что вы должны указать своему движку регулярных выражений, чтобы .
(точка) соответствовал символу новой строки:
- В Python это
re.DOTALL
флаг. - В JavaScript вы должны заменить все
.
(точки) в регулярном выражении на [\s\S]
. [ source ]
Также обратите внимание, что первое и последнее совпадения с регулярным выражением не будут иметь ничего в первой группе захвата, поэтому вы должны игнорировать эти совпадения (см. filter
вызвать python пример ниже).
Python пример
import re
text = """Suspendisse potenti:
Not MATCHED here. Por TOG esfet.
Treatments:
Pellentesque eget sollicitudin quam, id venenatis odio. Nam non tortor elit. Pras ultricies est urna, eu feugiat purus tempor a. Donec IBUPROFEN feugiat tristique ante, eget vulputate velit rhoncus ut. Morbi MATCHED HERE elementum leo a vulputate cursus. Sed at purus sit amet sapien COLCHICINE ullamcorper convallis.
Physical examination:
Also NOT MATCHED here at TO pulvinar mi, at vehicula libero. Nunc semper, neque sed tempor iaculis, nunc diam egestas lacus, Peget sodales sapien orci eget leo."""
results = re.findall(r".*Treatments|Physical examination.*|[^P]*?\b([A-Z]{2,})\b", text, re.DOTALL)
words = list(filter(None, results))
print(words)
Запустить