正则表达式 - 从字符串中提取电话号码

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]+)(?=~)

详情

(?&lt;=~\+|~) - 在当前位置的左侧必须有 ~+~ ([0-9]+) - 第 1 组:一位或多位数字 (?=~) - 在当前位置的右侧必须有 ~

【讨论】:

维克托,谢谢!这完美地工作。我也稍作修改以删除国家代码,因为我只想要 10 位数字。 (?

以上是关于正则表达式 - 从字符串中提取电话号码的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

使用正则表达式匹配和提取数据

精通 JS正则表达式

正则表达式

js正则表达式

精通正则表达式