您好我正在尝试构建一个正则表达式,使用java从给定字符串中提取4位数字。我尝试了以下方式:
String mydata = "get the 0025 data from string";
Pattern pattern = Pattern.compile("^[0-9]+$");
//Pattern pattern = Pattern.compile("^[0-90-90-90-9]+$");
//Pattern pattern = Pattern.compile("^[\\d]+$");
//Pattern pattern = Pattern.compile("^[\\d\\d\\d\\d]+$");
Matcher matcher = pattern.matcher(mydata);
String val = "";
if (matcher.find()) {
System.out.println(matcher.group(1));
val = matcher.group(1);
}
但它不能正常工作。这该怎么做。需要一些帮助。谢谢。
答案 0 :(得分:9)
将您的模式更改为:
Pattern pattern = Pattern.compile("(\\d{4})");
\d
用于数字,{}
中的数字是您想要的数字。
答案 1 :(得分:1)
Pattern pattern = Pattern.compile("\\b[0-9]+\\b");
这应该为你做。^$
将与整个字符串进行比较。它将仅匹配numbers
字符串。
答案 2 :(得分:0)
删除锚点..如果你想在group 1
中放置paranthesis:
Pattern pattern = Pattern.compile("([0-9]+)"); //"[0-9]{4}" for 4 digit number
并提取matcher.group(1)
答案 3 :(得分:0)
如果您想以 0025 结束,
String mydata = "get the 0025 data from string";
mydata = mydata.replaceAll("\\D", ""); // Replace all non-digits
答案 4 :(得分:0)
许多更好的答案,但如果你仍然必须以同样的方式使用。
String mydata = "get the 0025 data from string";
Pattern pattern = Pattern.compile("(?<![-.])\\b[0-9]+\\b(?!\\.[0-9])");
Matcher matcher = pattern.matcher(mydata);
String val = "";
if (matcher.find()) {
System.out.println(matcher.group(0));
val = matcher.group(0);
}
将matcher.group(1);
更改为matcher.group(0);
答案 5 :(得分:0)
您可以使用\d{4}
或[0-9]{4}
,但请注意,通过在正则表达式的开头指定^
并在结尾处指定$
,您可以将自己限制为字符串包含仅 4位数。
我的推荐:学习一些正则表达式的基础知识。
答案 6 :(得分:-1)
如果您想匹配任意数量的数字,请使用如下模式:
^\D*(\d+)\D*$
正好4位数字
^\D*(\d{4})\D*$