【问题标题】:Extracting telephone numbers提取电话号码
【发布时间】:2020-03-16 02:18:58
【问题描述】:

我想提取电话号码,但它只匹配Place C,但不匹配Place APlace B。有人可以帮我弄这个吗?提前致谢!

正则表达式

(.+?)\s*(\d+.*Singapore\s+\d{6}\b|\d+.*S\d{6})\b(?!(\.+?)\s*)(\+65[\d ]*)

编辑文本

Place A
2 Bayfront Avenue Galleria Level #B1-01 Singapore 018972 Tel: +65 6634 9969

Place B
23 Serangoon Central #B1-10 Singapore 556083 Phone: 6634 7787

Place C
1 Northpoint Drive South Wing #B1-107 Singapore 768019 6481 3433

【问题讨论】:

    标签: regex pcre


    【解决方案1】:

    在 6 位数字和电话号码之间,可以有一个标签,因此您需要考虑并以某种方式使用它。这样做的一个例子是允许任何字符可选地存在,这不是+ 符号,如下所示:

    [^+]*
    

    在你的正则表达式的上下文中,这使得它:

    (.+?)\s*(\d+.*Singapore\s+\d{6}\b|\d+.*S\d{6})\b(?!(\.+?)\s*)[^+]*(\+65[\d ]*)
    

    now matches 这三种情况。

    编辑:

    根据更新,我将正则表达式修改为match all six cases

    (.+?)\s*(\d+.*?Singapore\s+\d{6}\b|\d+.*?S\d{6})\b[^+0-9]*((?:\+65)?[\d ]*)
    

    【讨论】:

    • 这就像一个魅力!谢谢你的帮助。那么[^+]* 有助于消耗任何可选字符?
    • @scorezel789 - 是的,它是一个character class,它匹配[] 之间的任何字符,但在这个例子中,插入符号^ 否定它,所以它意味着匹配任何不是的字符在[^+]列表中,然后我们用*重复它0到无限次。
    • 我现在明白了。谢谢你的解释。
    • @scorezel789 - 移动括号,使其不再包含 +65 - \+65([\d ]*)
    • @scorezel789 - 将其设为可选:(?:\+65)?([\d ]*)
    猜你喜欢
    • 2013-09-21
    • 1970-01-01
    • 2023-02-20
    • 2018-05-22
    • 2015-09-19
    • 2014-01-27
    • 2016-10-26
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多