【问题标题】:Java Regular Expression removing everything but numbers from StringJava 正则表达式从字符串中删除除数字之外的所有内容
【发布时间】:2011-10-16 13:11:01
【问题描述】:

我有两个字符串 string1 = 44.365 Online order 和string2 = 0 Request Delivery。现在我想对这些字符串应用一个正则表达式,过滤掉除数字之外的所有内容,这样我就得到了像string1 = 44365和string2 = 0这样的整数。

我怎样才能做到这一点?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您可以使用^。它会考虑除您面前的一切之外的一切。

    因此,如果您有 [^y],它将过滤除 y 之外的所有内容。在你的情况下,你会做类似的事情

    String value = string.replaceAll("[^0-9]","");
    

    其中字符串是保存实际文本的变量!

    【讨论】:

    • \D 作为模式将缩短 67%。 ;)
    • 可以,但效率要低得多。
    • @DaMainBoss 如何也包含负数?我的意思是,我必须用空格替换所有不是正数/负数的东西。该怎么做?
    • @PankajSinghal 负数以- 开头,所以像[^-?0-9] 这样的东西应该可以解决问题。 -? 告诉正则表达式引擎匹配 - 如果它存在(0 或无)。
    【解决方案2】:
    String clean1 = string1.replaceAll("[^0-9]", "");
    

    或

    String clean2 = string2.replaceAll("[^\\d]", "");
    

    其中\d 是[0-9] 字符类的快捷方式, 或

    String clean3 = string1.replaceAll("\\D", "");
    

    其中\D 是\d 类的否定(表示[^0-9])

    【讨论】:

      【解决方案3】:
      string1 = string1.replaceAll("[^0-9]", "");
      string2 = string2.replaceAll("[^0-9]", "");

      【讨论】:

        【解决方案4】:

        这是Google Guava #CharMatcher 方式。

        String alphanumeric = "12ABC34def";
        
        String digits = CharMatcher.JAVA_DIGIT.retainFrom(alphanumeric); // 1234
        
        String letters = CharMatcher.JAVA_LETTER.retainFrom(alphanumeric); // ABCdef
        

        如果您只关心匹配 ASCII 数字,请使用

        String digits = CharMatcher.inRange('0', '9').retainFrom(alphanumeric); // 1234
        

        如果您只想匹配拉丁字母,请使用

        String letters = CharMatcher.inRange('a', 'z')
                                 .or(inRange('A', 'Z')).retainFrom(alphanumeric); // ABCdef
        

        【讨论】:

          猜你喜欢
          • 2011-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-11
          • 2012-02-27
          相关资源
          最近更新 更多