使用java创建正则表达式以从字符串中提取4位数字
Posted
技术标签:
【中文标题】使用java创建正则表达式以从字符串中提取4位数字【英文标题】:Creating regex to extract 4 digit number from string using java 【发布时间】:2015-08-15 23:25:45 【问题描述】:您好,我正在尝试构建一个正则表达式来使用 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);
但它不能正常工作。这个怎么做。需要一些帮助。谢谢。
【问题讨论】:
【参考方案1】:将你的模式更改为:
Pattern pattern = Pattern.compile("(\\d4)");
\d
是一个数字, 中的数字是你想要的位数。
【讨论】:
去掉括号并使用group(0)
不是更好吗? (微优化,没错,但在处理更复杂的模式时,它可能会派上用场)【参考方案2】:
如果你想以 0025 结尾,
String mydata = "get the 0025 data from string";
mydata = mydata.replaceAll("\\D", ""); // Replace all non-digits
【讨论】:
这是最好和最简单的方法。【参考方案3】:Pattern pattern = Pattern.compile("\\b[0-9]+\\b");
这应该会为您完成。^$
将与整个字符串进行比较。它将仅与 numbers
匹配字符串。
【讨论】:
【参考方案4】:移除锚点。如果你想要它们,请将它们放在group 1
:
Pattern pattern = Pattern.compile("([0-9]+)"); //"[0-9]4" for 4 digit number
并提取出matcher.group(1)
【讨论】:
【参考方案5】:许多更好的答案,但如果您仍然必须以相同的方式使用。
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);
【讨论】:
【参考方案6】:您可以使用\d4
或[0-9]4
,但请注意,通过在正则表达式的开头指定^
并在末尾指定$
,您将自己限制为仅包含的字符串strong> 4 位数。
我的建议:学习一些正则表达式基础知识。
【讨论】:
【参考方案7】: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("\\d4");
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();
)
【讨论】:
【参考方案8】:如果您想匹配任意数量的数字,请使用如下模式:
^\D*(\d+)\D*$
而正好是 4 位数字
^\D*(\d4)\D*$
【讨论】:
试试类似你不确定吗? 好的 - 更正(原来的问题也使用了表达“......我尝试了以下方式:......”)以上是关于使用java创建正则表达式以从字符串中提取4位数字的主要内容,如果未能解决你的问题,请参考以下文章