PowerShell中-match匹配后$Matches[1]返回空哈希表问题
问题原因及解决办法
核心原因
- 换行符匹配不完整:目标字符串中
Company Division后是完整的\r\n换行组合,但你的正则用[\r\n]仅匹配其中一个字符,剩下的另一个换行符会被[^\r\n]*的排除规则拦截,导致捕获组无法匹配到有效内容。 - 冗余的贪婪匹配:开头的
(?s).*属于冗余的贪婪匹配,虽然在当前单一场景下不会直接导致失败,但会增加匹配开销,若字符串中存在多个Company Division,还会意外匹配到最后一个实例,不符合预期。
修正后的正则表达式
直接精准匹配目标换行组合,去掉冗余的开头匹配:
$TextBoxText -match 'Company Division\r\n([^\r\n]*)'
如果需要兼容不同换行格式(比如仅\n的Unix风格换行),可以使用更通用的写法:
$TextBoxText -match 'Company Division\R([^\r\n]*)'
(\R在PowerShell中可匹配任意换行序列,包括\r\n、\n等)
修正后,$Matches[1]即可正确捕获到<my company name>。
内容的提问来源于stack exchange,提问作者user66001
相关产品推荐
相关产品推荐

