【问题标题】:Creating regex to extract 4 digit number from string using java使用java创建正则表达式以从字符串中提取4位数字
【发布时间】: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);
    }

但它不能正常工作。这个怎么做。需要一些帮助。谢谢。

【问题讨论】:

    标签: java regex string substring


    【解决方案1】:

    将你的模式更改为:

    Pattern pattern = Pattern.compile("(\\d{4})");
    

    \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】:

          您可以使用\d{4}[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("\\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&lt;String&gt; k=b.keySet();

            【讨论】:

              【解决方案8】:

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

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

              而正好是 4 位数字

              ^\D*(\d{4})\D*$
              

              【讨论】:

              • 试试类似你不确定吗?
              • 好的 - 更正(原来的问题也使用了表达“......我尝试了以下方式:......”)
              猜你喜欢
              • 2020-05-26
              • 2017-04-12
              • 2023-04-07
              • 1970-01-01
              • 1970-01-01
              • 2014-10-17
              • 1970-01-01
              • 2014-08-25
              • 1970-01-01
              相关资源
              最近更新 更多