Попробуйте re.findall (r "#### (. *?) \ S (. *?) \ S #### ", string, re.DOTALL)
(конечно, работает и с re.compile
).
Это регулярное выражение будет возвращать кортежи, содержащие номер раздела и содержимое раздела.
В вашем примере это вернет [('1', 'ttteest'), ('2', '\ n \ nttest')]
.
(Кстати: ваш пример не будет работать, для многострочных строк используйте '' '
или "" "
)
Многострочный не означает .
будет соответствовать возврату строки, это означает, что ^
и $
ограничены только строками
re.M re.MULTILINE
Если указано, символ шаблона '^' соответствует в начале строки и в начале> каждой строки (сразу после каждой новой строки); а символ шаблона '$'> соответствует концу строки и концу каждой строки (непосредственно перед каждой> новой строкой). По умолчанию '^' соответствует только началу строки, а '$' только> концу строки и непосредственно перед новой строкой (если есть) в конце строки.
re.S
или re.DOTALL
составляет .
совпадать даже с новыми строками.
Источник