【发布时间】:2019-11-13 22:57:58
【问题描述】:
我需要使用 powershell 创建一个日志文件。 它需要有患者的名字、姓氏和出生日期。 我目前正在尝试使用姓氏..
我有一个正则表达式可以正确输出患者的姓氏,但在某些情况下,患者的姓氏中间有一个破折号。 示例:Jonas Bauer-Schönemauer
我当前的正则表达式只匹配“Bauer”,但它应该匹配整个姓氏。这是我的问题。
以下是我当前的正则表达式行。 第一个匹配组是一个随机的数字字符串和“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:我需要正则表达式来匹配姓氏和中间的连字符。
【问题讨论】:
-
那么,你想在这里匹配第 9、10 和 11 行吗?但最后两个有
3102和3103,而不是3101。这里的规则是什么? -
试试
^(\d+310\d)([\w-]+)或^(\d+310\d)(\w+(?:-\w+)*) -
@WiktorStribiżew -我只需要匹配这个特定正则表达式行中的完整姓氏。姓氏总是有相同的前缀,我为名字和生日创建了不同的正则表达式行。 - 这也给了我与下面的答案相同的结果。它拿起连字符,但在“ö”之前停止...
-
不知道怎么回事,见
^(\d+310\d)([\p{L}\p{M}]+(?:-[\p{L}\p{M}]+)*)demo -
这真的很奇怪......你的正则表达式行实际上就像我想要的那样工作,但我的 powershell 只是无法显示“ö”。当我只是在控制台中输入包含正则表达式匹配的变量时,我得到了这个:Bauer-Sch%nemauer
标签: regex powershell match