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

问题描述 投票:0回答:1

我有一个正则表达式,应该取出除空格之外的字符串中非数字的所有字符。

输入看起来像这样:

{“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].", "");
java regex string-parsing
1个回答
2
投票

您的正则表达式[^a-zA-Z0-9\\s].需要匹配两个字符才能进行替换。第一个字符是非字母数字的非空格字符,因此在你的字符串中,

{“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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.