在使用正则表达式和Powershell的文档中查找人员姓名



我有一个word文档列表,我必须搜索。

通常,文档将被匿名化,以便将名字和姓氏替换为单个字符。

任务是找出文档未匿名化的位置以及文本中某人的名字。

例如,此文本是可以接受的: X先生遇到了一个问题。

此文本也是可以接受的: Y先生和Y太太遇到了一个问题。

但是,此文本是不可接受的: 琼斯先生遇到了一个问题。 或者这个.. 琼斯夫妇遇到了一个问题。

我想我可以得到一个可能的头衔列表(先生,夫人,医生等(

因此,我想构建一个正则表达式,该表达式将捕获 TITLE 的出现,后跟两个或多个字母字符。

我正在使用支持正则表达式的Powershell Select-String applet。 到目前为止,我有这个脚本:

$Search = "Mr[ ][A-Z][A-Z]"
$aryfiles = Get-Content "K:Echo MaintenanceScriptsSORDocSearchfilelist.csv"
Foreach ($file in $aryfiles) {
If (Get-Content $file | Select-String -Pattern $Search) {
$file
Get-Content $file | Select-String -Pattern $Search 
}
} 

这是正则表达式"Mr[ ][A-Z][A-Z]"我需要帮助,因为不幸的是,这与X先生和夫人相匹配,"和"字被解释为一个名字。

如果要匹配 2 个字母字符 a-z,您可以尝试使用 2 个字符类和一个可选的非捕获组。

bMr (?:and Mrs )?[A-Z][a-z]w*

正则表达式演示

对于标题,您可以使用交替来匹配不同的选项(?:Mrs?|Doctor)


或者对于与大写字母匹配的更广泛的字符匹配,以及任何类型的字母的 1+ 倍:

bMr (?:and Mrs )?p{Lu}p{L}+

正则表达式演示

最新更新