You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell正则替换将驼峰命名转为下划线分隔?

问题需求

需要用PowerShell正则替换命令,将驼峰命名的字符串:

RedHerringFallacy
SunkenCostFallacy
FalseDilemmaLogic
AnyOtherCamelCapString

转换为下划线分隔的命名格式:

Red_Herring_Fallacy
Sunken_Cost_Fallacy
False_Dilemma_Logic
Any_Other_Camel_Cap_String

失败的尝试及结果

1) 后向查找法

$string = "FundRegions"
$modifiedString = $string -replace '(?<=[a-z])(?=[A-Z])', '_'  
$modifiedString

结果:F_u_n_d_R_e_g_i_o_n_s

2) 基础替换法

$string = "FundRegions"
$modifiedString = $string -replace '([a-z])([A-Z])', '$1_$2'
$modifiedString

结果:F_un_dR_eg_io_ns

3) 反引号转义尝试

$string = "FundRegions"
$modifiedString = $string -replace '([a-z])([A-Z])', '`$1_`$2'
$modifiedString 

结果:F_un_dR_eg_io_ns

4) 逐字符遍历法

$string = "FundRegions"
function InsertUnderscores([string]$str) {
    $result = ""
    for ($i = 0; $i -lt $str.Length; $i++) {
        $result += $str[$i]
        if ($i -lt $str.Length - 1 -and $str[$i] -match '[a-z]' -and $str[$i+1] -match '[A-Z]') {
            $result += '_'
        }
    }
    return $result
}

$modifiedString = InsertUnderscores $string
$modifiedString

结果:F_u_n_d_R_e_g_i_o_n_s

正确解决方案

核心原因

所有尝试失败的根源是PowerShell的-replace运算符默认不区分大小写,导致正则中的[a-z]和[A-Z]匹配范围混乱,错误插入下划线。

实现方法

使用PowerShell的区分大小写替换运算符-creplace,结合正则即可完成转换:

方法1:零宽断言替换

# 处理单个字符串
$string = "RedHerringFallacy"
$modifiedString = $string -creplace '(?<=[a-z])(?=[A-Z])', '_'
$modifiedString  # 输出:Red_Herring_Fallacy

# 批量处理多行字符串
$camelCaseList = @"
RedHerringFallacy
SunkenCostFallacy
FalseDilemmaLogic
AnyOtherCamelCapString
"@ -split "`n"

$snakeCaseList = $camelCaseList | ForEach-Object { $_ -creplace '(?<=[a-z])(?=[A-Z])', '_' }
$snakeCaseList

输出:

Red_Herring_Fallacy
Sunken_Cost_Fallacy
False_Dilemma_Logic
Any_Other_Camel_Cap_String

方法2:捕获组替换

$string = "SunkenCostFallacy"
$modifiedString = $string -creplace '([a-z])([A-Z])', '$1_$2'
$modifiedString  # 输出:Sunken_Cost_Fallacy

说明

  • -creplace:强制区分大小写,确保[a-z]仅匹配小写字母,[A-Z]仅匹配大写字母。
  • 零宽断言(?<=[a-z])(?=[A-Z]):匹配小写字母与大写字母之间的空位置,插入下划线且不修改原有字符。
  • 捕获组([a-z])([A-Z]):捕获小写字母后跟大写字母的组合,替换为小写字母_大写字母,实现格式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:34:51