Защитить один конкретный случай в регулярном выражении в Python - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно заменить немецкие телефонные номера в python, что хорошо объяснено здесь: Regexp для немецкого формата телефонных номеров

Возможные форматы:

06442) 3933023     
(02852) 5996-0       
(042) 1818 87 9919   
06442 / 3893023  
06442 / 38 93 02 3     
06442/3839023
042/ 88 17 890 0     
+49 221 549144 – 79  
+49 221 - 542194 79  
+49 (221) - 542944 79
0 52 22 - 9 50 93 10 
+49(0)121-79536 - 77 
+49(0)2221-39938-113 
+49 (0) 1739 906-44  
+49 (173) 1799 806-44
0173173990644
0214154914479
02141 54 91 44 79
01517953677
+491517953677
015777953677
02162 - 54 91 44 79
(02162) 54 91 44 79

Я использую следующий код:

df['A'] = df['A'].replace(r'(\(?([\d \-\)\–\+\/\(]+)\)?([ .\-–\/]?)([\d]+))', r'\TEL', regex=True)

Проблема в том, что у меня есть даты в тексте:

df['A']
2017-03-07 13:48:39 Dear Sear Madam...

Это необходимо сохранить, как я могу исключить формат: 2017-03-07 и 13:48:39 от моей замены регулярного выражения?

Краткий пример:

df['A']
2017-03-077
2017-03-07
0211 11112244

желаемый вывод:

df['A']
TEL
2017-03-07
TEL

1 Ответ

1 голос
/ 28 октября 2019

Как бы вы ни делали это, вы не имеете дело с обычными данными, а регулярные выражения лучше всего работают с обычными данными. В вашей ситуации вы всегда будете сталкиваться с «ложными срабатываниями».

Лучше всего написать каждую модель индивидуально, как гигантский OR. Ниже приведен шаблон для первых трех телефонных номеров, поэтому просто выполните остальные из них.

\d{5}\) \d{7}|\(\d{5}\) \d{4}-\d|\(\d{3}\) \d{4} \d{2} \d{4}

https://regex101.com/r/6NPzup/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...