非贪婪的正则表达式替换

时间:2017-12-06 00:25:36

标签: python regex

我有以下文件:

STRING1
   "string2" = 1 ;
STRING1
   "string4" = 1 ;
STRING1

   "string3" = 1 ;
STRING1
"string5" = 1 ;

我想替换:

STRING1

   "string3" = 1 ;

由:

STRING1

   "string3" = 2 ;

使用(STRING1.*?".*?".*?=)(.*?)\;(甚至(STRING1.*?"string.?".*?=)(.*?)\;)我可以匹配单个STRING1 ... ;块,但如果我使用(STRING1.*?"string3.?".*?=)(.*?)\;,则正则表达式匹配string3块之前的所有内容。

1 个答案:

答案 0 :(得分:1)

当您知道STRING1.*? 无法包含特定字符时,请不要使用.*?。在这种情况下,.*?看起来更好地写为[^;"]*。您希望对".*?=案例进行类似的替换。

(STRING1[^;"]*"string3"[^"=]*=)[^;]*;

您仍然可能需要处理文件中如何表示引用字符串的情况。如果其中一个字符串包含您的整个问题怎么办?

一个完全可靠的修复程序实际上会解析整个文件以查找要进行的更改,但这可能对您的情况来说太过分了。