【问题标题】:Regular Expression to remove everything but characters and numbers正则表达式删除除字符和数字之外的所有内容
【发布时间】:2011-09-08 12:06:59
【问题描述】:

我想从字符串中删除除字符 a-z、A-Z 和 0-9 之外的所有内容,因此我需要为 Java 的 string.replaceAll(regex, ""); 创建一个正则表达式

旧字符串如下所示:

MAX EUK_1334-PP/B+

新字符串应如下所示:

MAXEUK1334PPB

【问题讨论】:

    标签: java regex


    【解决方案1】:

    可能有更简洁的正则表达式,但这肯定会起作用:

    string.replaceAll("[^a-zA-Z0-9]", "");
    

    【讨论】:

    • +1 快速回答。我在 iPhone 上输入答案的速度没有那么快 ;-)
    • 如果让它匹配多个字符可能会更快,所以 string.replaceAll("[^a-zA-Z0-9]+", "").
    • 试过字符串 24\7。奇怪的是它返回 24。为什么?
    • 你试过字符串文字"24\7"还是"24\\7"?前者是字符24和ASCII字符7(铃)。缺少反斜杠肯定可以解释您的结果。
    • @sandy 这就是重点,不允许使用斜线,为什么要包含它?
    【解决方案2】:
    string.replaceAll("[^a-zA-Z0-9]+", "");
    

    【讨论】:

    • @MRAB 后来提到我决定一次替换几个字符以获得更好的性能
    【解决方案3】:
    String test = "MAX EUK_1334-PP/B+";     
    test = test.replaceAll("[\\W_]", "");
    System.out.println(test + "\n");
    

    打印结果:

    MAXEUK1334PPB
    

    【讨论】:

    • 您知道\W 也不匹配“_”字符吗?
    • 这个正则表达式将包含想要的字符加上下划线。括号也是多余的。
    • 这导致unexpected char: 'W'Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
    • 更正了正则表达式,增加了更清晰的例子。
    【解决方案4】:

    有些人忘记了“_”字符:

    String regex = "[_\\W]";

    public class RegexFun2 {
       public static void main(String[] args) {
          String test = "MAX EUK_1334-PP/B+";
    
          String regex = "[_\\W]";
    
          String result = test.replaceAll(regex, "");
          System.out.println(result);
       }
    }
    

    但我仍然认为 OP 是在欺骗自己,因为他没有证明他首先尝试过,并在他原来的问题中发布了他的尝试。只是我的 2 美分。

    【讨论】:

      【解决方案5】:

      您可以使用字符的 ASCII 值:

      while(!end of string){
          if(valueOfChar is between 48-57 or 65-90 or 97-122)
                write it to your string
      }
      

      这可能会有所帮助,但我不知道您是否应该使用replaceAll 编写代码。 replaceAll 和此代码都具有相同的性能 (O(n))。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-11
        • 2011-10-16
        • 2017-08-24
        • 2015-10-16
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        相关资源
        最近更新 更多