我有一个如下形式的多行字符串:
Front
(A) Text1.
(A) Text2.
(A) Text3.
(A) Text4.
(A) Text5.
End
注意,文本1,文本2等可能包含换行符。我希望在每个文本1,文本2等后面附加字符串END
。
让c
表示上面的多行字符串,我尝试使用regex re.sub
来执行此操作:c = re.sub("\(A\)(.*?)\n\n\(A\)" , r"(A)\1 END\n\n(A)", c, flags=re.DOTALL)
但是,这只会替换每个奇数编号的点。
Front
(A) Text1. END
(A) Text2.
(A) Text3. END
(A) Text4.
(A) Text5.
End
最后一个要点可以作为例外情况处理,我更关心的是,只有每隔一个要点,END
才会附加在末尾,我相信这是因为当第二个(A)
被用作re.sub
的端点时,Python会将其排除在起点之外。
我该如何解决这个问题?
3条答案
按热度按时间js81xvg61#
Python的正则表达式支持 lookahead,这对你的用例很有好处:
第一个月
由
(?=)
表示的lookahead匹配包含的模式,但不将其包括在匹配的范围中(它是零宽度匹配)。样品:
印刷品
bnl4lu3b2#
我用来选择以
(A)
开头的行的regex:然后使用一个自定义替换函数在末尾返回原始行+
" END"
。下面是代码:
代码:
输出:
klr1opcd3#
你可以修改你的正则表达式模式来使用零宽度的LookAhead和Lookbehind(即不消耗字符)来解决你的问题:
我相信这是因为当第二个(A)被用作re.sub”的端点时
产出