我正在使用以下代码在JAVA中提取字符串: 输入为(000)000-0000111 ,输出应为(000)000-0000
String text = "(000) 000-0000111";
String pattern2 = "[(][0-9][0-9][0-9][)]\\s[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]";
Pattern pattern_22 = Pattern.compile(pattern2);
Matcher matcher_22 = pattern.matcher(text);
if(matcher_22.find()) {
return matcher_22.group(0);
}
else
return "NONE";
输出将显示为“ NONE”,它应该是(000)000-0000。我要去哪里错了。可以请别人指出。 TIA。
答案 0 :(得分:1)
根据您的评论:
我的目标不是:如果输入为(xxx)xxx-xxxxyyy,则输出应为 (xxx)xxx-xxxx x =任何整数
如果要替换最后三位数字,可以使用:
phone = phone.replaceAll("\\d{3}$", "");
我不想替换它,我想提取它。有一个巨大的 差异!
在这种情况下,好的工具是Pattern with Matcher,您的正则表达式可以是\(\d{3}\)\s\d{3}-\d{4}
:
String text = "(000) 000-0000111";
String regex = "\\(\\d{3}\\)\\s\\d{3}-\\d{4}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
return matcher.group();
} else {
return "NONE";
}
答案 1 :(得分:0)
只需用以下内容替换您的模式字符串:
[^1-9]
答案 2 :(得分:0)
您的问题无法编译。您需要进行如下修改
String text = "(000) 000-0000111";
String pattern2 = "[(][0-9][0-9][0-9][)]\\s[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]";
Pattern pattern_22 = Pattern.compile(pattern2);
Matcher matcher_22 = pattern_22.matcher(text);
if (matcher_22.find()) {
return matcher_22.group(0);
} else {
return "NONE";
}
这将根据您的问题输出(000)000-0000 。
尽管如此,您当前的正则表达式非常冗长。您可以使用更简单的方法,例如
\(\d{3}\) \d{3}\-\d{4}
请注意,在Java中,您必须转义反斜杠,因此在Java代码的上下文中它将是
\\(\\d{3}\\) \\d{3}\\-\\d{4}
其中\d
代表一个数字(0-9),{n}
代表一组n
,一个接一个。
如果除此之外,您还想知道输入中排除的内容(如注释中所述,您想提取尾随字符),则可以在正则表达式中使用捕获组,例如
(\(\d{3}\) \d{3}\-\d{4})(.*)
第一个捕获组(\(\d{3}\) \d{3}\-\d{4})
将为您提供所需的输出模式,第二个捕获组(.*)
将为您提供所有随后的输出。如果在Java中使用,则还必须转义反斜杠。
使用
pattern2 = "(\\(\\d{3}\\) \\d{3}\\-\\d{4})(.*)";
你会
String valid = matcher_22.group(1);
String rest = matcher_22.group(2);
其中valid
是(000) 000-0000
,而rest
是111
。