如何使用RegEx替换特定内容并实现指定字符串格式转换
实现方案
正则匹配与替换逻辑
用一套正则配合条件替换就能覆盖三种需求场景,具体如下:
匹配正则
^.*?(?:\.(\w+)\.(\w+)$|(\.\w+)(?:\s\[(\w)\w+\])?$)
替换规则(以PCRE/JavaScript为例)
根据捕获到的分组动态生成结果:
- 若捕获到第1、2组(对应
c:\data\dispatchPS.Designer.vb这类输入):替换为.${1:0:1}.${2} - 若捕获到第3、4组(对应
c:\data\dispatchPS.vb [Design]这类输入):替换为${3}.[${4}] - 若仅捕获到第3组(对应
c:\data\dispatchPS.vb这类输入):替换为${3}
分场景验证
- 输入:c:\data\dispatchPS.vb [Design]
匹配到分组3:.vb,分组4:D→ 输出:.vb.[D] - 输入:c:\data\dispatchPS.vb
仅匹配到分组3:.vb→ 输出:.vb - 输入:c:\data\dispatchPS.Designer.vb
匹配到分组1:Designer,分组2:vb→ 输出:.D.vb
正则拆解
^.*?:非贪婪跳过路径部分,避免干扰后续文件名的匹配(?:\.(\w+)\.(\w+)$):分支1,匹配含中间命名的文件名,捕获中间前缀(如Designer)和主扩展名(如vb)|:分支分隔符,切换到另外两种场景的匹配逻辑(\.\w+)(?:\s\[(\w)\w+\])?$:分支2,匹配带标记或纯扩展名的文件名,捕获主扩展名,可选捕获标记的首字母
兼容方案(无条件替换支持时)
如果所用工具不支持条件替换,可拆分三个正则分别处理:
- 处理带标记的场景:
- 匹配:
^.*(\.\w+)\s\[(\w)\w+\]$ - 替换:
$1.[$2]
- 匹配:
- 处理含中间命名的场景:
- 匹配:
^.*\.(\w+)\.(\w+)$ - 替换:
.${1:0:1}.$2
- 匹配:
- 处理纯扩展名的场景:
- 匹配:
^.*(\.\w+)$ - 替换:
$1
- 匹配:
内容的提问来源于stack exchange,提问作者Peter Rudo
相关产品推荐
相关产品推荐

