正则表达式在坐标数据上出现故障

Regex is malfunctioning on the coordinates data

我有一个正则表达式,它应该删除字符串中除 space 之外的所有非数字字符。

输入看起来像这样:

{“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]. 需要恰好匹配两个字符才能进行替换。第一个字符是非字母数字非 space 字符,因此在您的字符串中它们是

{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}
^              ^  ^ and so on

正则表达式中的下一个字符是 .,它将匹配任何字符。因此,您的正则表达式成对删除字符,其中第一个字符是您想要的字符,但第二个字符有时幸运地与您要删除的字符匹配,但有时 . 不幸匹配一个数字,因此它删除数字。请参阅此演示以了解您的正则表达式匹配的内容。

Demo

您应该将 . 更改为 + 以使其删除一个或多个字符并使用此正则表达式,

[^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