我想删除列表中所有段落的起始字符串(不区分大小写):["keyword", "disclosure"]
我的代码:
re.sub("(?i)\n(keyword|disclosure).*(\n|$)", "\n", txt)
如果两个坏段落之间至少有一个段落,则此方法可以正常工作,但如果一行中有多个坏段落,则此方法不起作用。
举例来说:
Text text text
Keywords: text text, text. Texts
Disclosures of stuff text more texts
Stuff text text
导致后面的坏段落被错过:
Text text text
Disclosures of stuff text more texts
Stuff text text
而不是我想看到的:
Text text text
Stuff text text
我如何确保所有重复的匹配也被替换?最好我也喜欢重复的匹配作为相同的匹配,所以我没有得到额外的换行符,但如果它更干净,更容易只是替换重复的换行符后,这是确定的。
3条答案
按热度按时间yftpprvb1#
比赛开始和结束时的
'\n'
在连续的比赛中彼此重叠。相反,使用^
来匹配开头,这也将涵盖字符串以您想要删除的段落开头的情况。它需要标志MULTILINE
才能工作。然后,替换字符串变为空字符串。rjee0c152#
输出
3npbholx3#
使用
re.MULTILINE
(即(?m)
)和^
/$
锚:打印出
如果需要的话,你可以清除多个换行符(因为这将用一个空字符串替换整行)。