我是RegEx的新手所以请光临我:)
我基本上试图从电话号码中移除+1(国家/地区代码)(我正在处理规范化项目)。例如,用户的电话号码为+1(703)-555-5787,他希望它为(703)-555-5787(前面没有+1)。
我的理论是我可以根据正则表达式模式搜索phoneNum字符串。一旦找到,我可以打印它或做任何我喜欢的事情。我的代码如下所示:
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;
}
我错过了什么?
答案 0 :(得分:0)
matches
会尝试匹配模式完全 ..
因此,如果你的正则字符串之间没有电话号码,那么你的正则表达式将不起作用。
使用Matcher的find方法
if (m.find())
{
ret = m.group().substring(2, m.group().length());
}
答案 1 :(得分:0)
试试正则表达式:
String regex = "\\([0-9]{3}\\)-[0-9]{3}-[0-9]{4}";
将if块修改为:
if (m.find()){
ret = m.group(0);
}
答案 2 :(得分:0)
我在这里尝试并测试了以下正则表达式:
String regex = "\\([0-9]{3}\\)-[0-9]{3}-[0-9]{4}";
然后,修改if块:
if (m.matches()){
ret = m.group(2);
}
无论+1前缀是否存在,都应该始终返回电话号码。
答案 3 :(得分:0)
所以,我想出来了(在我问过它之后大约20分钟我试着回答我的问题,但我不会让我这么做)。尽管如此,感谢大家的反馈和支持,我真的很感激。
这是我的错误:
我的正则表达式为String regex = "(\\+1)([2-9][0-9][0-9])-([2-9][0-9]{2})-([0-9]{4})";
,但我的phoneNum字符串为+1(703)-555-4563。它给了我错误,因为正则表达式正在寻找一些这样的格式:+ 1703-555-4563(区域代码周围没有())。因此,找不到子串是不可能的,因为它不存在。我的正则表达式应该是String regex = "(\\+1)(\\([2-9][0-9][0-9]\\))-([2-9][0-9]{2})-([0-9]{4})";
。
谢谢大家的帮助!
非常感谢:)