[英]Replacing a string between two strings on more then one occasion with regex, python
我正在嘗試使用正則表達式來查找和替換文件中兩個字符串之間的文本字符串。 我遇到的問題是我希望它在找到“ End”字符串之后“中斷”,但是它替換了第一個“ 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
終止版權
開始版權
酒吧
終止版權
因此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)
僅當后者不在子字符串END COPYRIGHT
或BEGIN COPYRIGHT
的開頭時,后者才匹配[\\w\\s]
,因此即使有人忘記在其中放置END COPYRIGHT
部分,也不會超出其范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.