【问题标题】:Java regex to filter phone numbersJava 正则表达式过滤电话号码
【发布时间】:2012-01-03 08:18:20
【问题描述】:

我有以下需要过滤的示例字符串

0173556677 (Alice), 017545454 (Bob)

这就是将电话号码添加到文本视图的方式。我希望文本看起来像那样

0173556677;017545454

有没有办法使用正则表达式更改文本。这样的表情会是什么样子?还是您推荐其他方法?

【问题讨论】:

  • 看看谷歌的 libphonenumber

标签: java android regex


【解决方案1】:

你可以这样做:

String orig = "0173556677 (Alice), 017545454 (Bob)";
String regex = " \\(.+?\\)"; 
String res = orig.replaceAll(regex, "").replaceAll(",", ";");
//                           ^remove all content in parenthesis
//                                                 ^ replace comma with semicolon

【讨论】:

  • regex 变量中,有一个?。我尝试在没有? 的情况下执行代码,变量res 得到0173556677 而不是0173556677; 017545454。正则表达式意义上的? 表示可选字符。这到底是什么意思?
【解决方案2】:

使用android.util.Patterns中的表达式

访问静态变量

Patterns.PHONE

或使用此表达式here(Android 源代码)

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      此解决方案适用于以任何不包含数字的字符串分隔的电话号码:

      String orig = "0173556677 (Alice), 017545454 (Bob)";    
      String[] numbers = orig.split("\\D+"); //split at everything that is not a digit 
      StringBuilder sb = new StringBuilder();
      if (numbers.length > 0) {
          sb.append(numbers[0]);
          for (int i = 1; i < numbers.length; i++) { //concatenate all that is left
              sb.append(";");
              sb.append(numbers[i]);
          }
      }
      String res = sb.toString();
      

      或者,使用 com.google.common.base.Joiner:

      String[] numbers = orig.split("\\D+"); //split at everything that is not a digit 
      String res = Joiner.on(";").join(numbers);
      

      PS。与最佳投票示例中的要求略有偏差,但似乎我不能只添加一个字符(应该是replaceAll(", ", ";"),逗号后有一个空格,或者\\s),我不想搞砸某人的代码。

      【讨论】:

        猜你喜欢
        • 2016-02-02
        • 2019-05-23
        • 2017-09-23
        • 2014-02-15
        • 1970-01-01
        • 2011-12-14
        • 2013-05-26
        • 1970-01-01
        相关资源
        最近更新 更多