多次使用regex、python替换两个字符串之间的字符串

2024-05-03 17:09:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用正则表达式来查找和替换文件中两个字符串之间的文本字符串。我遇到的问题是,我希望它在找到“End”字符串后“break”,但是它会替换第一个“begin”字符串和最后一个“End”字符串之间的所有文本。在

_copyright = 'BEGIN COPYRIGHT \n The replacing string \n END COPYRIGHT'

_file = re.sub(r'BEGIN COPYRIGHT[\w\s]*END COPYRIGHT',_copyright, _file)

BEGIN COPYRIGHT

FOO

END COPYRIGHT

BEGIN COPYRIGHT

BAR

END COPYRIGHT

所以foo和bar都应该变成“替换字符串”,但是文档变成了

BEGIN COPYRIGHT

The replacing string

END COPYRIGHT


Tags: 文件the字符串文本restringfileend
1条回答
网友
1楼 · 发布于 2024-05-03 17:09:56

至少,你需要让星量词变懒:

_file = re.sub(r'BEGIN COPYRIGHT[\w\s]*?END COPYRIGHT',_copyright, _file)

否则,[\w\s]*将贪婪地匹配尽可能多的字符,包括任何中间的END COPYRIGHT/BEGIN COPYRIGHT序列。在

另一种更为明确的方法是:

^{pr2}$

后一个版本只匹配[\w\s],前提是它不在子串END COPYRIGHTBEGIN COPYRIGHT的开头,因此即使有人忘记将END COPYRIGHT部分放在那里,也不会超出其界限。在

相关问题 更多 >