正则表达式 - 从字符串中提取电话号码
Posted
技术标签:
【中文标题】正则表达式 - 从字符串中提取电话号码【英文标题】:Regex - Extract phone numbers from string 【发布时间】:2019-02-07 20:15:04 【问题描述】:我需要从带有分隔符(波浪号)的字符串中提取两个电话号码。棘手的部分是电话号码的格式可能会有所不同。
字符串模式保持不变。但是电话号码的格式可以是三种类型之一
(1) 4 digit extensions. (ex. 1001)
(2) 10 digit (5551112222)
(3) 10 digit with country code (+15558889999)
我需要去掉 +1 国家代码的分机号或 10 位号码。所以
(1) 1001 = 1001
(2) 5551112222 = 5551112222
(3) +15558889999 = 5558889999
示例字符串
2019/02/06/2019-02-06T084903~call~5551112222~+15558889999~231a6a62-c1c8-43a8-ac2e-f8428237385c.WAV
从上面的字符串中,我需要提取两个正确的 10 位格式的电话号码
(1) 5551112222
(2) 5558889999
到目前为止,我有以下正则表达式:
(?<=\~)(.*?)(?=\~)
这给了我三个组
(1) Call
(2) 5551112222
(3) +15558889999
但是,我需要的是两个格式正确的组
(1) 5551112222
(2) 5558889999
我将这个正则表达式模式与 Integromat 一起使用,因此在这种情况下没有任何编码语言解决方案可以工作。它必须是 100% 正则表达式。
感谢您对此的任何帮助。谢谢!
【问题讨论】:
【参考方案1】:你可以使用
(?<=~\+|~)([0-9]+)(?=~)
见regex demo
如果lookbehind有问题,使用稍微修改的变体:
(?:(?<=~\+)|(?<=~))([0-9]+)(?=~)
详情
(?<=~\+|~)
- 在当前位置的左侧必须有 ~+
或 ~
([0-9]+)
- 第 1 组:一位或多位数字
(?=~)
- 在当前位置的右侧必须有 ~
。
【讨论】:
维克托,谢谢!这完美地工作。我也稍作修改以删除国家代码,因为我只想要 10 位数字。 (?以上是关于正则表达式 - 从字符串中提取电话号码的主要内容,如果未能解决你的问题,请参考以下文章