正则匹配不定次数重复模式时,如何替换每个匹配的字符串?
实现方案
不需要写复杂的可变长度匹配正则,用最基础的全局替换逻辑就能覆盖所有字符串数量不确定的场景,不管行内是0个、1个还是10个以上字符串都能正常处理。
单行格式转换方案
所有支持正则替换的文本编辑器都能直接用,分两步操作:
- 第一步处理行首和行尾的固定前后缀
- 查找规则:
^mark:: (.+)$ - 替换内容:
mark:: xx$1xx
说明:如果要保留
mark::后无内容的空行,把规则里的.+改成.*即可,空行替换后会变成mark:: xxxx;不需要处理空行就保持.+,空行会原样保留。 - 查找规则:
- 第二步全局替换所有逗号分隔位,给中间的字符串补全前后缀
- 查找规则:
,(逗号+空格,开启全局匹配) - 替换内容:
xx, xx
- 查找规则:
转换效果示例:
原行mark:: string1, string2, string3处理后为mark:: xxstring1xx, xxstring2xx, xxstring3xx,完全符合要求。
多行格式转换方案
同样用基础全局替换实现,不需要高级正则特性,操作分两步:
- 第一步处理行首行尾前后缀
- 查找规则:
^mark:: (.+)$ - 替换内容:
mark:: xx$1xx
空行处理逻辑和单行方案一致。
- 查找规则:
- 第二步全局替换逗号分隔位,自动拆行
- 查找规则:
,(逗号+空格,开启全局匹配) - 替换内容:
xx\nmark:: xx
- 查找规则:
转换效果示例:
原行mark:: string1, string2, string3处理后输出:
mark:: xxstring1xx mark:: xxstring2xx mark:: xxstring3xx
如果行内只有1个字符串,第二步不会触发替换,会直接输出mark:: xxstring1xx的单行格式,不会产生多余空行。
内容的提问来源于stack exchange,提问作者Ooker
相关产品推荐
相关产品推荐

