[英]Creating regex to extract 4 digit number from string using java
嗨,我正在尝试构建一个正则表达式来使用 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);
}
但它不能正常工作。 这该怎么做。 需要一些帮助。 谢谢你。
将您的模式更改为:
Pattern pattern = Pattern.compile("(\\d{4})");
\\d
是一个数字, {}
中的数字是您想要的数字位数。
如果你想以0025结尾,
String mydata = "get the 0025 data from string";
mydata = mydata.replaceAll("\\D", ""); // Replace all non-digits
Pattern pattern = Pattern.compile("\\b[0-9]+\\b");
这应该为你做。 ^$
将与整个字符串进行比较。它将匹配仅包含numbers
字符串。
删除锚点.. 如果你想把它们放在group 1
加上括号:
Pattern pattern = Pattern.compile("([0-9]+)"); //"[0-9]{4}" for 4 digit number
并提取matcher.group(1)
许多更好的答案,但如果您仍然必须以相同的方式使用。
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);
您可以使用\\d{4}
或[0-9]{4}
但请注意,通过在正则表达式的开头指定^
并在结尾指定$
,您将自己限制为仅包含 4 位数字的字符串。
我的建议:学习一些正则表达式基础知识。
Scanner sc=new Scanner(System.in);
HashMap<String,String> a=new HashMap<>();
ArrayList<String> b=new ArrayList<>();
String s=sc.nextLine();
Pattern p=Pattern.compile("\\d{4}");
Matcher m=p.matcher(s);
while(m.find())
{
String x="";
x=x+(m.group(0));
a.put(x,"0");
b.add(x);
}
System.out.println(a.size());
System.out.println(b);
您可以找到所有匹配的数字模式和唯一模式(用于唯一使用Set<String> k=b.keySet();
)
如果要匹配任意数量的数字,请使用如下所示的模式:
^\D*(\d+)\D*$
而对于正好 4 位数字去
^\D*(\d{4})\D*$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.