使用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&lt;String&gt; k=b.keySet();

【讨论】:

【参考方案8】:

如果您想匹配任意数量的数字,请使用如下模式:

^\D*(\d+)\D*$

而正好是 4 位数字

^\D*(\d4)\D*$

【讨论】:

试试类似你不确定吗? 好的 - 更正(原来的问题也使用了表达“......我尝试了以下方式:......”)

以上是关于使用java创建正则表达式以从字符串中提取4位数字的主要内容,如果未能解决你的问题,请参考以下文章

C#正则表达式如何提取一段字符串中汉字后的数字

正则表达式提取数字并用千位分隔符对它们进行分组

正则表达式,由英文字母和数字组成的4-16位字符,以字母开头,怎么写

java正则表达式的使用

从 10 位数字中获取所有可能的连续 4 位数字

批处理如何用正则提取字符串中间的数字,和结尾的数字