java 正则表达式删除除字符和数字以外的所有内容

46qrfjad  于 2023-04-19  发布在  Java
关注(0)|答案(6)|浏览(144)

我想删除字符串中除了字符a-z、A-Z和0-9以外的所有字符,因此我需要为Java的string.replaceAll(regex, "");创建一个正则表达式
旧的字符串看起来像这样:

MAX EUK_1334-PP/B+

新的字符串应该如下所示:

MAXEUK1334PPB
du7egjpx

du7egjpx1#

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

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

zengzsys2#

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

f0brbegy3#

String test = "MAX EUK_1334-PP/B+";     
test = test.replaceAll("[\\W_]", "");
System.out.println(test + "\n");

打印结果:

MAXEUK1334PPB
j7dteeu8

j7dteeu84#

有些人忘记了“_”字符:
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是欺骗自己,没有证明他首先尝试,并张贴在他原来的问题他的尝试。

toe95027

toe950275#

几乎与OP相同,我尝试了Ramda

const filteredString = R.replace (/[^a-zA-Z0-9 "-/]/g, '');

删除除字符以外的所有内容(加上:“-/)。奇怪的是,如果没有使用构造函数,这个正则表达式并没有删除点(.)。其他一切都像一个魅力。
因此,对于OP应该是

const filteredString = R.replace (/([^a-zA-Z0-9])|(_)/g, '');

或使用RegExp构造函数

const onlyChars = new RegExp ('([^a-zA-z0-9])|(_)', 'g');
const filteredString = R.replace (onlyChars, '');

并使用它:

const oldString = `MAX EUK_1334-PP/B+`;
filteredString (oldString); -> "MAXEUK1334PPB"

UPDATE:我的错误,我应该第一次写错了,因为点实际上被删除了。这个正则表达式不删除的字符是_,所以我添加了。

8xiog9wr

8xiog9wr6#

您可以使用字符的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))。

相关问题