我有一个正则表达式,应该取出除空格之外的字符串中非数字的所有字符。
输入看起来像这样:
{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}
输出应如下所示:
23 882 91 317 55 672 871 437 230 12 435 907 320 32 855 107
相反,我看到输出:
23 882 91 317 5 672 871 437 30 12 435 907 20 32 855 107
它正在, "
之后删除一个数字字符,我留下:
5 instead of 55
30 instead of 230
20 instead of 320
我不是正则表达式的专家,所以想看看是否有人可以指出代码中的错误。以下是正则表达式现在的样子。
String processedString = s.replaceAll("[^a-zA-Z0-9\\s].", "");
您的正则表达式[^a-zA-Z0-9\\s].
需要匹配两个字符才能进行替换。第一个字符是非字母数字的非空格字符,因此在你的字符串中,
{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}
^ ^ ^ and so on
正则表达式中的下一个字符是.
,它将匹配任何字符。因此,你的正则表达式是成对删除字符,其中第一个字符是你想要的字符,但第二个字符有时幸运地与你想要删除的字符匹配,但有时.
匹配一个数字不幸,因为它删除了数字。请参阅此演示,了解正则表达式的匹配情况。
您应该将.
更改为+
以使其删除一个或多个字符并使用此正则表达式,
[^a-zA-Z0-9\s]+
Correctly replacing only unwanted characters demo
你的Java代码,
String s = "{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}";
String processedString = s.replaceAll("[^a-zA-Z0-9\\s]+", "");
System.out.println(processedString);
打印以下内容而不删除任何数字,
23 882 91 317 55 672 871 437 230 12 435 907 320 32 855 107