如何用PowerShell从Word文档提取全大写单词,正则匹配失效怎么解决?
PowerShell提取Word全大写单词问题修复方案
问题原因
- 正则表达式语法不符合PowerShell规范:你写的
/\b[A-Z]+\b/g是JavaScript等语言的正则写法,PowerShell的Select-String不需要用斜杠包裹正则内容,也不需要末尾的g全局匹配标识,默认就会扫描所有匹配项。 - 未开启大小写敏感匹配:PowerShell的正则匹配默认不区分大小写,仅写
[A-Z]也会命中小写字母,需要显式开启大小写敏感校验。
修复后的代码
将最后一行匹配逻辑替换为如下内容即可得到预期结果:
# 匹配所有全大写单词 $capwords = Get-Content $path | Select-String -Pattern '\b[A-Z]+\b' -CaseSensitive -AllMatches # 直接提取匹配到的单词文本 $capwords.Matches.Value
如果需要对结果去重,可在末尾追加| Select-Object -Unique。
可选优化
你可以省去导出TXT文件的步骤,直接在内存中处理Word段落内容,减少磁盘IO,同时建议处理完成后释放Word COM对象,避免后台残留进程:
$capwords = @() foreach ($para in $doc.Paragraphs) { $matchResult = [regex]::Matches($para.Range.Text, '\b[A-Z]+\b') if ($matchResult.Success) { $capwords += $matchResult.Value } } # 释放Word进程 $doc.Close() $word.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
内容的提问来源于stack exchange,提问作者Christian McGhee
相关产品推荐
相关产品推荐

