1

因此,我们正在查看其他一些正则表达式帖子,但在一个实例中我们无法删除特殊情况;特殊字符在单词的开头。

我们的代码中有以下行:

String k = s.replaceAll("([a-z]+)[()?:!.,;]*", "$1");

其中 s 是单数词。例如,当通过分词解析句子“(hi hi hi)”,然后对每个分词执行replaceAll函数时,我们得到以下输出:

(hi
hi
hi

我们的正则表达式中缺少什么?

4

4 回答 4

3

您可以使用更简单的方法 - 将不需要的字符替换为空格

String k = s.replaceAll("[()?:!.,;]+", " ");
于 2013-04-07T00:06:36.113 回答
0

位置很重要,因此您还需要在捕获组之前匹配排除的字符:

String k = s.replaceAll("[()?:!.,;]*([a-z]+)[()?:!.,;]*", "$1");
于 2013-04-07T00:08:17.020 回答
0

您的替换刚刚删除了 之后的“特殊字符” [a-z]+,这就是(之前hi保留的原因。

如果您知道s是一个单词,您可以:

String k = s.replaceAll("\\W*(\\w+)\\W*", "$1");

或者

String k = s.replaceAll("\\W*", "");
于 2013-04-07T00:10:44.477 回答
0

这可以更简单

尝试这个 :

String oldString = "Hi There @#$ What is %#your name?@#$@#$ 0123$$"; 
System.out.println(oldString.replaceAll("[\\p{Punct}\\s\\d]+", " ");

输出:嗨,你叫什么名字 0123

所以它也接受数字。.replaceAll("[\p{Punct}\s\d]+", " "); 将替换所有使用的标点符号,其中包括几乎所有特殊字符。

于 2014-12-12T08:26:14.573 回答