python - 保护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-07
并13:48:39
从我的正则表达式替换中排除?
简短的例子:
df['A']
2017-03-077
2017-03-07
0211 11112244
所需的输出:
df['A']
TEL
2017-03-07
TEL
解决方案
以任何方式对它进行切片,都不是在处理常规数据,而正则表达式最适合处理常规数据。在你的情况下,你总是会遇到“误报”。
你最好的办法是把每个模式单独写成一个巨人OR
。以下是前三个电话号码的模式,因此只需执行其余的电话号码即可。
\d{5}\) \d{7}|\(\d{5}\) \d{4}-\d|\(\d{3}\) \d{4} \d{2} \d{4}
推荐阅读
- docker - 如何在 Docker 容器中运行的 tcp 客户端/服务器和在外部设备中运行的 tcp 服务器/客户端之间建立连接?
- visual-studio-code - 如何让 VSCode 在打开大括号(C/C++)之前自动生成空格?
- docker - 本地主机上的 Docker 错误:拨打 tcp:在 8.8.8.8:53 上查找本地主机:没有这样的主机
- angular - 我正在尝试将角度从 9 更新到 11。如何解决依赖问题?
- php - 使用相同类型的多个关系改进急切加载
- sql - 插入 SQL 表时如何避免 XML 中的重复
- c++ - 为什么我的 HTTP 服务器只接收第一个 GET 请求
- php - 过滤数组和中断引用的简洁、惯用的方法?
- javascript - 在网站上创建虚拟模型或贴花
- active-directory - 本地活动目录的测试环境