正则表达式:如何在Properties文件等号后字符串中多次匹配目标内容
解决Properties文件值替换问题:仅修改等号后所有'old'为'new'
问题根源
你之前用的正则(?<=).*old之所以只能匹配到最后一个'old',是因为.*是贪婪匹配,它会从字符串开头一直匹配到最后一个'old'的前半部分,导致整个正则只命中一次,而不是等号后的每一个'old'。
方法一:精准正则匹配
用下面的正则可以匹配等号之后的每一个'old':
(?<==[^=]*?)old
(?<==[^=]*?)是正向后顾断言:确保当前匹配的'old'前面是等号+任意非等号字符(非贪婪模式),这样就能锁定在等号之后的区域,逐个匹配每个'old'。- 替换时选择“全局替换”(比如正则引擎的
gflag),就能把等号后的所有'old'换成'new'。
示例效果:
输入:
message.document.old.text=This old document is very old and will stay old forever
输出:message.document.old.text=This new document is very new and will stay new forever
方法二:拆分字符串处理(更直观)
如果不想纠结正则,直接把字符串按第一个等号拆成键和值两部分,单独替换值里的内容再拼接,逻辑更简单,不易出错:
以Python为例:
original_line = "message.document.old.text=This old document is very old and will stay old forever" # 按第一个等号拆分,得到键和值 key_part, value_part = original_line.split('=', 1) # 替换值里的所有'old' new_value = value_part.replace('old', 'new') # 拼接成新行 new_line = f"{key_part}={new_value}"
执行后得到的new_line就是目标结果。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

