解析并删除java正则表达式中的特殊字符

解析并删除java正则表达式中的特殊字符,java,regex,Java,Regex,因此,我们正在研究其他一些正则表达式的帖子,在一个例子中,我们很难删除一个特殊的案例;这个特殊的字符在单词的开头 我们的代码中有以下行: String k = s.replaceAll("([a-z]+)[()?:!.,;]*", "$1"); 其中s是单数词。例如,当通过标记化来解析句子“(hi-hi)”时,然后对每个标记执行replaceAll函数,我们得到以下输出: (hi hi hi 正则表达式中缺少了什么?您可以使用更简单的方法-用空格替换不需要的字符: String k = s.

因此,我们正在研究其他一些正则表达式的帖子,在一个例子中,我们很难删除一个特殊的案例;这个特殊的字符在单词的开头

我们的代码中有以下行:

String k = s.replaceAll("([a-z]+)[()?:!.,;]*", "$1");
其中s是单数词。例如,当通过标记化来解析句子“(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 oldString = "Hi There @#$ What is %#your name?@#$@#$ 0123$$"; 
System.out.println(oldString.replaceAll("[\\p{Punct}\\s\\d]+", " ");
输出: 你好,你叫什么名字

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

谢谢,我想我是想得太多了。我还将其替换为“”而不是“”
String oldString = "Hi There @#$ What is %#your name?@#$@#$ 0123$$"; 
System.out.println(oldString.replaceAll("[\\p{Punct}\\s\\d]+", " ");