首页 > 解决方案 > 使用 RegEx 和 Powershell 在文档中查找人员姓名

问题描述

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

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

任务是找出文档未被匿名的地方以及文本中某人的名字。

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

此文本也可以接受:Y 先生和 Y 夫人遇到了问题。

然而,这个文本是不可接受的:琼斯先生遇到了一个问题。或者这个..琼斯先生和夫人遇到了一个问题。

我想我可以获得一份可能的头衔列表(先生、夫人、医生等)

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

我正在使用支持 RegEx 的 Powershell Select-String 小程序。到目前为止,我有这个脚本:

$Search = "Mr[ ][A-Z][A-Z]"
$aryfiles = Get-Content "K:\Echo Maintenance\Scripts\SORDocSearch\filelist.csv"
Foreach ($file in $aryfiles) {

    If (Get-Content $file | Select-String -Pattern $Search) {
        $file
        Get-Content $file | Select-String -Pattern $Search 
    }
} 

这是正则表达式“Mr[ ][AZ][AZ]”我需要帮助,因为不幸的是这匹配 Mr 和 Mrs X,'and' 词被解释为一个名字。

标签: regexpowershell

解决方案


如果您想要与 2 个字母字符 az 匹配,您可以尝试使用可选非捕获组的 2 个字符类。

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

正则表达式演示

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


或者对于匹配大写字母和任何类型字母 1 倍以上的字符的更广泛匹配:

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

正则表达式演示


推荐阅读