Во-первых, вы можете использовать .*+
вместо [^$]+
. Он не фиксирует паттерны, которые включают \n
.
. Затем поставьте «не в начале строки - (?!^)
» и «не в конце строки - (?<!$)
». И используйте |
, чтобы объединить их.
print(re.findall(r'(?m)(?!^)\$\$(.+?)\$\$|\$\$(.+?)\$\$(?<!$)', txt))
напечатает:
[(' inline ', ''), ('', ' inline 2 ')]
(?m)
обозначает флаг «многострочный».
Если вы хотите заменить для REPLACED!!
,
print(re.sub(r'(?m)(?!^)\$\$(.+?)\$\$|\$\$(.+?)\$\$(?<!$)', '$$ REPLACED!! $$', text))
вывод:
$$ stand alone $$
$$ stand
alone $$
And there $$ REPLACED!! $$.
$$ REPLACED!! $$ some text also.
Если вам не нравится, что номер группы не соответствует,
Вы можете использовать условный шаблон :
print(re.findall(r'(?m)(.+)?\$\$(.+?)\$\$(?(1)|.+)', text))
вывод:
[('And there ', ' inline '), ('', ' inline 2 ')]
Теперь номер целевой группы всегда равен 2.