You need to enable JavaScript to run this app. 如何仅在正则匹配的cmd_开头子串中替换连字符为下划线
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在正则匹配的cmd_开头子串中替换连字符为下划线

各工具下的匹配替换实现

核心目标:仅替换以cmd_为开头的独立单词内部的横杠为下划线,非cmd_开头的单词中的横杠完全保留,无横杠数量限制。

Xcode 搜索替换实现

  • 打开查找替换面板(快捷键 Command + Option + F)
  • 开启正则匹配模式(点击面板上标识为 .* 的按钮)
  • 查找输入框填入规则:(?<=\bcmd_[\w-]*)-
  • 替换输入框填入:_
  • 点击「替换全部」即可完成操作

规则说明:匹配逻辑为定位所有属于cmd开头单词内部的横杠,不会跨单词边界匹配。例如文本cmd_w1-w2-w3 test w4-w5,仅会替换cmd开头字符串里的3个横杠,后续w4-w5的横杠完全保留。

Vim 实现

在Vim的普通模式下,直接执行全局替换命令:

:%s/\v(\w*cmd_[\w-]*)@<=-/_/g
  • 命令逻辑:通过零宽度正向后视,判断当前横杠是否处于cmd开头的单词范围内,符合条件就替换为下划线
  • 无需重复操作,单次执行即可完成所有数量的横杠替换

Sed 实现

针对不支持变长环视的Sed引擎,采用循环匹配的方式实现,执行命令:

sed -E ':loop s/\b(cmd_[a-zA-Z0-9_-]*)-/\1_/g; t loop' 目标文件路径
  • 命令逻辑:循环匹配cmd开头单词内的第一个横杠并替换,直到没有可匹配的横杠为止
  • 不受最多4个横杠的数量限制,所有符合条件的横杠都会被替换

Python 实现

兼容所有Python版本的实现代码,无需依赖正则引擎的高级特性:

import re

# 匹配所有独立的、以cmd_开头的单词
cmd_word_re = re.compile(r'\bcmd_[\w-]*\b')

def replace_internal_hyphen(match):
    # 仅在匹配到的cmd单词内部,将横杠替换为下划线
    return match.group().replace("-", "_")

# 读取目标文件内容
with open("待修改的文件路径", "r", encoding="utf-8") as f:
    file_content = f.read()

# 执行替换
modified_content = cmd_word_re.sub(replace_internal_hyphen, file_content)

# 将修改后的内容写回文件
with open("待修改的文件路径", "w", encoding="utf-8") as f:
    f.write(modified_content)

Perl 实现

依靠Perl正则对变长环视的原生支持,单命令即可完成批量替换:

perl -pi -e 's/(?<=\bcmd_[\w-]*)-/_/g' 待修改的文件路径
  • 逻辑与Python版本一致,仅识别cmd开头单词内部的横杠做替换,不影响其他位置的文本

内容的提问来源于stack exchange,提问作者Droopycom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 23:54:01