使用正则表达式在Java中提取子字符串。如何包含空格字符
我使用以下代码在JAVA中提取字符串: 输入为(000)000-0000111,输出应为(000)000-0000使用正则表达式在Java中提取子字符串。如何包含空格字符,java,regex,Java,Regex,我使用以下代码在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 = pat
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";
输出为“无”,应为(000)000-0000。我哪里做错了。请有人指出。TIA。根据您的评论:
不,我的目标是:如果输入是(xxx)xxxxxxyyy,那么输出应该是
(xxx)xxx xxxx x=任意整数
如果要替换最后三位数字,可以使用:
phone = phone.replaceAll("\\d{3}$", "");
我不想替换它,我想提取它。这是一个巨大的挑战 不同 在这种情况下,好的工具是带有匹配器的模式,正则表达式可以是
\(\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-9]
你的问题无法解决。您需要按如下方式修改它
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
,一个接一个
除此之外,如果您还想知道从输入中排除了什么(如注释中所述,您想提取尾随字符),您可以在regex中使用捕获组,例如
(\(\d{3}\) \d{3}\-\d{4})(.*)
其中,第一个捕获组,(\(\d{3}\)\d{3}-\d{4})
将为您提供想要作为输出的模式,第二个,(.*)
将为您提供后面的所有其他模式。如果在Java中使用,还必须有转义反斜杠
与
你会的
String valid = matcher_22.group(1);
String rest = matcher_22.group(2);
其中
valid
是(000)000-0000
而rest
是111
您的代码不编译。一旦修复,它将返回预期值<代码>模式!==图案22。事实上,您有这么多命名糟糕的变量,这可能表明您的实际方法太长,并且使用了几种不同的模式。将其重构为更小的方法。投票以打字错误结束。否我的目标是:如果输入是(xxx)xxx xxxxyyy,那么输出应该是(xxx)xxx xxxx x=任何整数我不想替换它我想提取它。这是一个巨大的差异@你为什么不看看评论呢?只要使用了正确的变量,代码就可以正常工作。
String valid = matcher_22.group(1);
String rest = matcher_22.group(2);