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

Как можно с помощью регулярного выражения определить три части в многострочном тексте? В данном тексте есть стих из нескольких строк, информация о сайте и остальное содержимое. Каким образом можно сформировать список из этих трёх частей, учитывая "главный якорь" – "Информация сайта"?
  • 20 июня 2024 г. 20:21
Ответы на вопрос 2
Для поиска трех совпадений в многострочном тексте можно использовать следующее регулярное выражение:

```python
import re

text = """
Строка 1
Строка 2
Информация сайта
Строка 3
Строка 4
Информация сайта
Строка 5
"""

pattern = re.compile(r"Информация сайта", re.MULTILINE)
matches = pattern.findall(text)

if len(matches) >= 3:
    print("Найдено три совпадения")
else:
    print("Совпадений меньше трех")

```

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

```python
import re

text = """
Строка 1
Строка 2
Информация сайта
Строка 3
Строка 4
Информация сайта
Строка 5
"""

pattern = re.compile(r"(?s)(?=Информация сайта)(.*?)(?=Информация сайта|$)")
matches = pattern.findall(text)

for match in matches:
    print(match.strip())

```

Это регулярное выражение разделит текст на три части: текст до первого "Информация сайта", текст между первым и вторым вхождением "Информация сайта" и текст после второго "Информация сайта". В итоге вы получите список из трех частей текста.
Тут лучше без регулярок, будет эффективнее: https://go.dev/play/p/7Ae-T6O0YmD 

text := `Мы оба влюблены в один и тот же сон,
Нас вынесла волна — и укатилась с шумом.
Ты ль жарче влюблена, иль я страстней влюблен,
Какое дело нам! Мы не поверим думам! 15 июня 1903
Информация сайта: https://domain.tdl/?name=asdasdasd
`

parts := strings.Split(text, "Информация сайта: ")

fmt.Println(parts[0])
fmt.Println(parts[1])


Если очень хочется регуляркой, тогда так: https://go.dev/play/p/pJ0mtx4gWPC

re := regexp.MustCompile(`(?s)^(.+)Информация сайта: (.+)$`)

matches := re.FindStringSubmatch(text)

fmt.Println(matches[1])
fmt.Println(matches[2])
Похожие вопросы