首页 > 解决方案 > 保护python中正则表达式中的一个特定案例

问题描述

我需要在 python 中替换德国电话号码,这在这里得到了很好的解释: Regexp for German phone number format

可能的格式有:

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-0713:48:39从我的正则表达式替换中排除?

简短的例子:

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

所需的输出:

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

标签: pythonregexpandas

解决方案


以任何方式对它进行切片,都不是在处理常规数据,而正则表达式最适合处理常规数据。在你的情况下,你总是会遇到“误报”。

你最好的办法是把每个模式单独写成一个巨人OR。以下是前三个电话号码的模式,因此只需执行其余的电话号码即可。

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

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


推荐阅读