所以我们正在查看其他一些正则表达式帖子,我们在一个实例中删除特殊情况时遇到问题;特殊字符在单词的开头。
我们的代码中包含以下行:
String k = s.replaceAll("([a-z]+)[()?:!.,;]*", "$1");
其中s是单数词。例如,当通过对它进行标记来解析句子“(hi hi hi)”,然后对每个标记执行replaceAll函数时,我们得到一个输出:
(hi
hi
hi
我们的正则表达式中缺少什么?
答案 0 :(得分:3)
您可以使用更简单的方法 - 用空格替换不想要的字符:
String k = s.replaceAll("[()?:!.,;]+", " ");
答案 1 :(得分:0)
位置很重要,因此您需要在捕获组之前匹配排除的字符
String k = s.replaceAll("[()?:!.,;]*([a-z]+)[()?:!.,;]*", "$1");
答案 2 :(得分:0)
你的替换只是删除了[a-z]+
之后的“特殊字符”,这就是(
hi
之前留下的原因。
如果您知道s
是单个字词
你可以:
String k = s.replaceAll("\\W*(\\w+)\\W*", "$1");
或
String k = s.replaceAll("\\W*", "");
答案 3 :(得分: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] +”,“”); 将取代所使用的标点符号,其中包括几乎所有特殊字符。