使正则表达式在所需字符串的中间接受连字符/破折号

时间:2019-07-03 09:25:56

标签: regex powershell match

我需要使用powershell创建一个日志文件。 它需要有患者的名字,姓氏和生日。 我目前正在尝试使用姓氏。

我有一个正则表达式可以正确输出患者的姓氏,但是在某些情况下,患者的姓氏中间带有短划线。 示例:乔纳斯·鲍尔-舍讷马尔

我当前的正则表达式仅匹配“鲍尔”,但假定匹配整个姓氏。这是我的问题。

下面是我当前的Regex行。 第一个匹配组是随机数字和“ 3101”字符串,这是此医疗文件中的姓氏前缀。

^(\d+3101)(\p{L}+)

这里是文件的摘录,我试图这样做(我将数字放在每行的开头,文件中的那些空格!):

1      01380006310
2      014810000722
3      01092063
4      014921802.10
5      0220102GE Healthcare
6      0190103CardioSoft
7      0140132V6.73
8      01630000085271
9      0253101Bauer-Schönemauer
10     0143102Jonas
11     017310321051937

第9行:姓氏

第10行:名字

第11行:生日(0173103 [21.05.1937])

有人可以帮我吗?

TL; DR:我需要使用正则表达式来使姓氏与中间的连字符匹配。

1 个答案:

答案 0 :(得分:1)

您应该给我们一个字符类[]

^(\d+3101)([\p{L}-]+)

使用-match并提取第二个子匹配项:

PS D:\> "0253101Bauer-Schönemauer" -match "^(\d+3101)([\p{L}-]+)"  
True  
PS D:\> $Matches[2]  
Bauer-Schönemauer