#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