Заставить Regex принимать дефис / тире в середине требуемой строки - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно создать файл журнала, используя powershell. Для этого необходимо указать имя, фамилию и дату рождения пациента. В настоящее время я пытаюсь заставить работать фамилию ..

У меня есть регулярное выражение, которое правильно выводит фамилию пациента, но в некоторых случаях у пациента есть фамилия с тире в середине. ПРИМЕР: Йонас Бауэр-Шёнемауэр

Мое текущее регулярное выражение соответствует только "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: мне нужно, чтобы регулярное выражение также совпадало с фамилиями и дефисом в середине.

1 Ответ

1 голос
/ 03 июля 2019

Вы должны использовать класс символов []:

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

Используя -match и извлекая второе совпадение:

PS D:\> "0253101Bauer-Schönemauer" -match "^(\d+3101)([\p{L}-]+)"  
True  
PS D:\> $Matches[2]  
Bauer-Schönemauer  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...