【问题标题】:Capturing repeating number groups with regex in java在java中使用正则表达式捕获重复的数字组
【发布时间】:2012-02-03 02:00:50
【问题描述】:

我在一个字符串中有一个或多个电话号码。它们用空格分隔。我怎样才能将这些数字分组,没有空格?而且我不想使用拆分。

【问题讨论】:

  • 请举例。?或者可以试试string.split(" ");
  • 电话号码的格式是什么?
  • 例如 String numbers="2398989 1289813 9823981 1989213"
  • “我不想使用 split。” 我们为什么要关心你想要什么?它是有效的(并形成逻辑、可读的代码),这很重要。
  • 是的,我很感兴趣如何在正则表达式中进行拆分

标签: java regex parsing


【解决方案1】:

试试String.split()方法。

String []numbers=string.split(" ");

【讨论】:

    【解决方案2】:

    所以,基本上你正在寻找用空格分割任何东西的东西。这是我要使用的正则表达式:

    ([^ ]+)
    

    也许,使用它会是一个更好的选择:

    ([^\s]+)
    

    因为这将包括任何空白字符(空格、制表符、NL、FF、VT、CR)。

    但是,我同意其他评论者的观点,即 split() 是您的最佳选择...

    这里是regex example

    【讨论】:

      【解决方案3】:

      如果您必须使用正则表达式并且所有电话号码都是数字(没有其他字符)。

      试试这个代码:

          String phone = "11111 22222 33333 44444";
          String regex = "(\\d+)";
          Matcher m = Pattern.compile(regex).matcher(phone);
          while(m.find())
              System.out.println(m.group(0));
      

      【讨论】:

      • 它会为每个单独的电话号码组成一个组吗?
      • 没有。您应该在 while 循环的每个步骤中获取每个匹配的电话号码。在第一次匹配时,它们不会存储在数组或其他东西中。可以把find()当成findNext的意思。
      【解决方案4】:

      如果您必须使用正则表达式。你可以试试

      String phoneNumbers = "2398989 1289813 9823981 1989213";
      Pattern pattern = Pattern.compile("(\\d{7})");
      Matcher matcher = pattern.matcher(phoneNumbers);
      
      while (matcher.find()) {
          System.out.println(matcher.group(0));
      }
      

      顺便说一句,string.split 也需要一个正则表达式。

      【讨论】:

        猜你喜欢
        • 2011-10-19
        • 2011-09-19
        • 1970-01-01
        • 2017-09-13
        • 2011-03-11
        • 2017-01-07
        • 2019-12-19
        • 1970-01-01
        相关资源
        最近更新 更多