因此,我们正在查看其他一些正则表达式帖子,但在一个实例中我们无法删除特殊情况;特殊字符在单词的开头。
我们的代码中有以下行:
String k = s.replaceAll("([a-z]+)[()?:!.,;]*", "$1");
其中 s 是单数词。例如,当通过分词解析句子“(hi hi hi)”,然后对每个分词执行replaceAll函数时,我们得到以下输出:
(hi
hi
hi
我们的正则表达式中缺少什么?
您可以使用更简单的方法 - 将不需要的字符替换为空格:
String k = s.replaceAll("[()?:!.,;]+", " ");
位置很重要,因此您还需要在捕获组之前匹配排除的字符:
String k = s.replaceAll("[()?:!.,;]*([a-z]+)[()?:!.,;]*", "$1");
您的替换刚刚删除了 之后的“特殊字符” [a-z]+
,这就是(
之前hi
保留的原因。
如果您知道s
是一个单词,您可以:
String k = s.replaceAll("\\W*(\\w+)\\W*", "$1");
或者
String k = s.replaceAll("\\W*", "");
这可以更简单
尝试这个 :
String oldString = "Hi There @#$ What is %#your name?@#$@#$ 0123$$";
System.out.println(oldString.replaceAll("[\\p{Punct}\\s\\d]+", " ");
输出:嗨,你叫什么名字 0123
所以它也接受数字。.replaceAll("[\p{Punct}\s\d]+", " "); 将替换所有使用的标点符号,其中包括几乎所有特殊字符。