PowerShell正则表达式匹配问题求助:提取指定格式构建编号
解决PowerShell中提取指定格式构建编号的正则问题
问题分析
你需要从字符串#1737 - 1725-74033 - x64,x86中提取格式为数字-数字的构建编号1725-74033,原正则[^#0-9)][0-9-]+[0-9]在PowerShell中失效的原因是:
[^#0-9)]会匹配非#/数字/)的任意字符(比如字符串开头的空格和-)[0-9-]+的贪婪匹配会错误包含无关的-符号,导致匹配结果偏离预期
解决方案
使用正向前后断言精准定位目标内容,避免匹配无关字符。以下是两种PowerShell实现方式:
方式1:使用-match操作符
$inputStr = "#1737 - 1725-74033 - x64,x86" # 匹配被" - "包裹的数字-数字格式内容 if ($inputStr -match '(?<= - )\d+-\d+(?= - )') { $matches[0] # 输出结果:1725-74033 }
方式2:使用Select-String
"#1737 - 1725-74033 - x64,x86" | Select-String -Pattern '(?<= - )\d+-\d+(?= - )' | ForEach-Object { $_.Matches.Value }
正则说明
(?<= - ):正向后顾断言,确保目标内容前是-\d+-\d+:匹配1个以上数字+连字符+1个以上数字的格式(?= - ):正向前瞻断言,确保目标内容后是-
这种写法直接精准提取目标构建编号,无需额外处理x86/x64或开头空格。
内容的提问来源于stack exchange,提问作者user13093055
相关产品推荐
相关产品推荐

