Как с помощью регулярных выражений в Python найти фразу или слово, которое находится между двумя заданными словами?

Как можно с помощью регулярного выражения извлекать текст, расположенный между словами "Наименование" и "Maskota" или "Картина"? Я пробовал использовать следующее выражение: <blockquote>Наименованиеs+(.*?)(?=s*(?:Maskota|Зеркало|$))</blockquote>
  • 8 ноября 2024 г. 6:13
Ответы на вопрос 2
Регулярные выражения в Python можно использовать для поиска текста между двумя заданными словами, как вы и планируете. При этом важно правильно настроить шаблон, чтобы он учитывал пробелы и возможные вариации в написании слов. Давайте рассмотрим, как можно улучшить ваш регулярное выражение.

Вот пример, который вы можете использовать для извлечения текста между словами "Наименование" и "Maskota" или "Картина":

```python
import re

text = """
Наименование пример текста между словами Maskota и еще какой-то текст
Наименование еще один пример текста между словами Картина и что-то еще
"""

# Шаблон для поиска текста между "Наименование" и "Maskota" или "Картина"
pattern = r'Наименование\s+(.*?)(?=\s*(Maskota|Картина))'

matches = re.findall(pattern, text)

for match in matches:
    print(match[0].strip())
```

### Объяснение регулярного выражения:
- `Наименование` — ищем слово "Наименование".
- `\s+` — один или более пробельных символов.
- `(.*?)` — захватываемая группа, которая будет содержать текст до следующего слова. `.*?` значит "любой символ (кроме\n ) ноль или более раз, не жадно".
- `(?=\s*(Maskota|Картина))` — негативное опережающее утверждение, которое проверяет, что после текста, который мы захватываем, будет пробел и одно из заданных слов ("Maskota" или "Картина").

Функция `re.findall` вернет все найденные совпадения в виде списка кортежей, где каждый кортеж содержит найденный текст и слово, за которым он следует. В `match[0]` находится интересующий нас текст между словами.

### Пример вывода:
Если использовать приведенный текст, результатом будет:
```
пример текста между словами
еще один пример текста между словами
```

Этот код и регулярное выражение будут работать, если в вашем тексте присутствуют ключевые слова "Наименование" и одно из слов "Maskota" или "Картина".
/Наименование\s*(.*?)\s*(Maskota|Картина) 
Брать первую группу.
Похожие вопросы