Несколько дней назад я опубликовал вопрос о том, как поймать слова в тексте, предшествующие определенному совпадению с регулярным выражением. введите здесь описание ссылки а>
С предложенными решениями я играю в regex101, пытаясь получить слова, которые СЛЕДУЮТ за совпадением.
Это код:
content="""Lorem ipsum dolor sit amet (12,16) , consectetur 23 adipiscing elit. Curabitur (45) euismod scelerisque consectetur. Vivamus aliquam velit (46,48,49) at augue faucibus, id eleifend purus (34) egestas. Aliquam vitae mauris cursus, facilisis enim (23) condimentum, vestibulum enim. """
print(content)
pattern =re.compile(r"((?:\w+ ?){1,5}(?=\(\d))(\([\d]+\))(?: )(?:\w+ ?){1,5}")
matches = pattern.findall(content)
print('the matches are:')
print(matches)
регулярное выражение работает и улавливает числа между скобками.
это объяснение регулярного выражения
((?:\w+ ?){1,5}(?=\(\d))(\([\d]+\))(?: )(?:\w+ ?){1,5}
________________________***********++++++++++++++
____ = это взгляд сзади. Ищет от 1 до 5 слов перед совпадением до открытия (
****= фактическое регулярное выражение ===> числа в скобках
++++= Это та часть, которую я якобы использую для перехвата слов ПОСЛЕ регулярного выражения.
Я попробовал это в regex101 с этим, по-видимому, хорошим результатом:
Но результат кода следующий:
[('Curabitur ', '(45)'), ('id eleifend purus ', '(34)'), ('facilisis enim ', '(23)')]
как вы видите, в список входят кортежи с первыми предыдущими словами, а затем само совпадение, НО НЕ СЛЕДУЮЩИЕ СЛОВА.
Где подвох????
Моим ожидаемым результатом будет:
matches=[('Curabitur ', '(45)', '**euismod scelerisque consectetur**'), ('id eleifend purus ', '(34)', '**egestas**'), ('facilisis enim ', '(23)', '**condimentum**')]