【问题标题】:Make Regex accept hyphen/dash in the middle of required string使正则表达式在所需字符串的中间接受连字符/破折号
【发布时间】: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 行吗?但最后两个有31023103,而不是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


【解决方案1】:

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

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

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

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

【讨论】:

  • 首先感谢您的回答!这似乎实现了这篇文章的目标,但现在出现了一个新问题......似乎它就在“变异元音”之前停止,在这种情况下是“ö”。我是否还需要集成包含这些字符的东西?信息:这给我的比赛如下:“Bauer-Sch”
  • 我用我自己的代码 sn-p 尝试了正则表达式,因为你没有发布你的代码。结果如预期。我已经编辑了答案以包含结果。
猜你喜欢
  • 1970-01-01
  • 2020-03-17
  • 2018-04-17
  • 1970-01-01
  • 2012-08-23
  • 2023-02-09
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多