如何在PowerShell中提取字符串里方括号[]间的文本?
提取字符串中方括号内的文本(PowerShell解决方案)
你的核心需求是提取字符串里[]包裹的内容,原正则表达式存在两处关键问题:
- 左方括号的断言写法错误,应该用
(?<=\[)而非(?<=\[]) - 结尾的断言
(?=[-\)])限定了匹配内容后必须是-或),不符合你的示例场景
修正后的实现代码
# 示例输入数组 $FileDirRef = @( "/site/GD/[A33.4]Admin", "/site/HD/[D9.1]Communication" ) # 正确匹配方括号内内容的正则 $pattern = '(?<=\[)[^\]]+(?=\])' $results = switch -Regex ($FileDirRef) { $pattern { [PSCustomObject]@{ String = $_ Match = $Matches[0] } } Default { } } # 输出提取结果 $results
正则表达式说明
(?<=\[):正向零宽断言,确保匹配内容的前导字符是左方括号[[^\]]+:匹配任意数量(至少1个)非]的字符,这就是我们需要提取的目标内容(?=\]):正向零宽断言,确保匹配内容的后续字符是右方括号]
多匹配场景扩展
如果单条字符串中存在多个方括号组(比如/site/[A1][B2]Test),可以添加-AllMatches参数捕获所有匹配项:
$results = switch -Regex -AllMatches ($FileDirRef) { $pattern { foreach ($match in $_.Matches) { [PSCustomObject]@{ String = $_ Match = $match.Value } } } Default { } }
内容的提问来源于stack exchange,提问作者Dan Brisson
相关产品推荐
相关产品推荐

