Мы можем попробовать использовать re.findall
в режиме DOT ALL:
string = "Hello World A \n Block1 \n Block2 \n \n Hello World B \n Block1 \n Block2"
result = re.findall("Hello World.*?(?=Hello World|$)", string, re.DOTALL)
print(result)
['Hello World A \n Block1 \n Block2 \n \n ', 'Hello World B \n Block1 \n Block2']
Вот шаблон, который я использовал:
Hello World.*?(?=Hello World|$)
Это соответствует Hello World
, за которым следует все, что указаночто мы не потребляем другой Hello World
, или в самом конце строки.Режим DOT ALL необходим, потому что мы хотим, чтобы .*
мог совпадать и потреблять символы новой строки.