【问题标题】: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% 正则表达式。

感谢您对此的任何帮助。谢谢!

【问题讨论】:

    标签: regex


    【解决方案1】:

    你可以使用

    (?<=~\+|~)([0-9]+)(?=~)
    

    regex demo

    如果lookbehind有问题,使用稍微修改的变体:

    (?:(?<=~\+)|(?<=~))([0-9]+)(?=~)
    

    详情

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

    【讨论】:

    • 维克托,谢谢!这完美地工作。我也稍作修改以删除国家代码,因为我只想要 10 位数字。 (?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2017-09-23
    相关资源
    最近更新 更多