Если вы пытаетесь, чтобы соответствовать новой строки, попробуйте
re.search('=============== K # 1 ===============(\n*)=====================',
'=============== K # 1 ===============\n\n==================================================')
Как *
жаден, если вы используете .
, он будет соответствовать как многие из =
с, как он может после \n
с как ну как только \n
с, если вы используете re.DOTALL, чтобы он соответствовал \n
. Поскольку вы, по-видимому, только хотите сопоставить \ n \ n, это не то, что вы хотите.
Обратите внимание, что вы можете сделать это более компактным, указав количество =
с вы хотите, чтобы соответствовать:
re.search('={15} K # 1 ={15}(\n*)={21}',
'=============== K # 1 ===============\n\n==================================================')
Чтобы проиллюстрировать эту проблему с помощью .
:
In [7]: s = '=============== K # 1 ===============\n\n=================================================='
In [8]: re.search('={15} K # 1 ={15}(.*)={21}', s, re.DOTALL).groups()
Out[8]: ('\n\n=============================',)
In [9]: re.search('={15} K # 1 ={15}(\n*)={21}', s).groups()
Out[9]: ('\n\n',)
В качестве альтернативы, вы можете используйте [^=]
для соответствия любым не-'=' или \s
для соответствия любым пробелам.
В то время как это будет работать, матч он возвращает будет включать в себя некоторое количество '=' ы в дополнение к '\ п \ п 'он пытается сопоставить, и если применить к большей строке, скорее всего, будет соответствовать еще больше. – cge