首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在模式中查找RegEx子模式

在模式中查找RegEx子模式
EN

Stack Overflow用户
提问于 2013-07-04 01:34:16
回答 4查看 1.6K关注 0票数 0

我正在尝试从电话号码中删除+1 (国家代码)(我正在进行一个标准化项目)。例如,用户有一个+1(703)-555-5787格式的电话号码,他希望它是(703)-555-5787 (前面没有+1 )。

我的理论是可以根据正则表达式模式搜索phoneNum字符串。一旦找到它,我就可以打印它或做任何我喜欢的事情。我的代码如下所示:

代码语言:javascript
运行
复制
public static String normalizePrefix(final String phoneNum) {
    String ret = phoneNum;

    if (!phoneNum.contains("+1")) {
        logger.log(Level.INFO, "input phone number doesn't contain country code (+1)");
    }
    else {          

        String regex = "(\\+1)([2-9][0-9][0-9])-([2-9][0-9]{2})-([0-9]{4})";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(phoneNum); 


            if (phoneNum.matches(regex)){
                ret = m.group().substring(2, m.end());
            }

    }
    logger.log(Level.INFO, phoneNum + "-->" + ret);
    return ret;
}

我遗漏了什么?

EN

回答 4

Stack Overflow用户

发布于 2013-07-04 01:37:37

matches将尝试完全匹配模式..

因此,如果字符串之间有电话号码,那么正则表达式将不起作用。

使用Matcher的find方法

代码语言:javascript
运行
复制
 if (m.find())
 {
      ret = m.group().substring(2, m.group().length());
 }
票数 0
EN

Stack Overflow用户

发布于 2013-07-04 18:24:35

尝试regex:

代码语言:javascript
运行
复制
String regex = "\\([0-9]{3}\\)-[0-9]{3}-[0-9]{4}";

并将if块修改为:

代码语言:javascript
运行
复制
if (m.find()){
            ret = m.group(0);
}
票数 0
EN

Stack Overflow用户

发布于 2013-07-04 19:42:45

我在这里尝试并测试了以下正则表达式:

代码语言:javascript
运行
复制
String regex = "\\([0-9]{3}\\)-[0-9]{3}-[0-9]{4}";

之后,修改if块:

代码语言:javascript
运行
复制
if (m.matches()){
    ret = m.group(2);
}

这应该始终返回电话号码,无论是否有+1前缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17454632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档