我尝试使用正则表达式来查找和替换文件中两个字符串之间的文本字符串。我遇到的问题是,我希望它在找到“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
至少,你需要让星量词变懒:
否则,
[\w\s]*
将贪婪地匹配尽可能多的字符,包括任何中间的END COPYRIGHT/BEGIN COPYRIGHT
序列。在另一种更为明确的方法是:
^{pr2}$后一个版本只匹配
[\w\s]
,前提是它不在子串END COPYRIGHT
或BEGIN COPYRIGHT
的开头,因此即使有人忘记将END COPYRIGHT
部分放在那里,也不会超出其界限。在相关问题 更多 >
编程相关推荐