簡體   English   中英

使用正則表達式,python多次替換兩個字符串之間的字符串

[英]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 COPYRIGHTBEGIN COPYRIGHT的開頭時,后者才匹配[\\w\\s] ,因此即使有人忘記在其中放置END COPYRIGHT部分,也不會超出其范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM