возьмите все линии между двумя шаблонами с помощью регулярного выражения

#python #regex

Вопрос:

Я использовал

(?<=<li>)..(?=</li>)

только для ОДНОЙ такой СТРОКИ:
pattern1 Everything pattern2
но это не работает для нескольких строк!
как можно взять все и все строки(1,2,3,4,5) вот так:
(пробелы не нужны)

 <pre>
pattern1
line1
   line2
      line3
   line4
line5
pattern2
</pre>
 

Комментарии:

1. Это действительно расплывчато. Используете ли вы одно регулярное выражение для распознавания этого начала и конца? Отдельное регулярное выражение для каждого?

2. Пожалуйста, приведите минимальный функциональный пример

3. Не используйте регулярные выражения для анализа HTML/XML, вместо этого используйте специализированный анализатор. Это избавит вас от множества неприятностей и подводных камней.

4. Не используйте регулярные выражения для анализа HTML или XML. Например, см. html.parser из стандартной библиотеки или lxml .

5. Спасибо. могу ли я использовать синтаксический анализатор для источника страницы? Я использовал requests.get(url)

Ответ №1:

Для многих строк вам может потребоваться опция re.DOTALL и/или re.MULTILINE

 text = '''<pre>
pattern1
line1
   line2
      line3
   line4
line5
pattern2
</pre>'''

import re

result = re.findall('pattern1(.*)pattern2', text, re.DOTALL)

print('len:', len(result))
print(result[0].strip())
 

Результат:

 len: 1

line1
   line2
      line3
   line4
line5