gpt4 book ai didi

python - 使用正则表达式,python多次替换两个字符串之间的字符串

转载 作者:行者123 更新时间:2023-11-28 22:01:36 31 4
gpt4 key购买 nike

我试图使用正则表达式来查找和替换文件中两个字符串之间的文本字符串。我遇到的问题是,我希望它在找到“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)

开始版权

最终版权
开始版权
酒吧
最终版权
所以foo和bar都应该成为“替换字符串”,但是文档会变成
开始版权
替换字符串
最终版权

最佳答案

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

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

否则, [\w\s]*将贪婪地匹配尽可能多的字符,包括任何中间的 END COPYRIGHT/BEGIN COPYRIGHT序列。
另一个稍微明确一点的方法是:
_file = re.sub(r'''(?x)BEGIN COPYRIGHT
(?:(?!(?:END|BEGIN) COPYRIGHT)[\w\s])*
END COPYRIGHT''',_copyright, _file)

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

关于python - 使用正则表达式,python多次替换两个字符串之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12784624/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com