首页 > 解决方案 > 我应该在正则表达式中添加什么来删除出现超过 1 次的标点符号?

问题描述

我正在尝试编写一个正则表达式,它将删除出现超过 1 次的另一种语言的字母和标点符号。

从另一种语言中删除字母是通常的表达方式:

st = test.replaceAll("[^ a-zA-z0-9]" ,  "");

但我不明白我应该添加什么,以便它不会删除所有标点符号和空格,而只会删除那些出现超过 1 次的符号和空格: String test = new String("agagahh,,,mvf .... AJFKL ???");

我很乐意提供帮助

输入 :"agagahh,,,mvf .... AJFKL ???"

输出:"agagahh,mvf . AJFKL ?"

标签: java

解决方案


您可以先删除所有非字母数字字符或接受的标点符号之一。然后,您可以使用捕获组匹配一个标点符号,然后再匹配一个或多个相同的标点符号,以替换为单个标点符号。

String str = "agagahh,,,mvf ....      AJFKL  ???";
String res = str.replaceAll("[^ a-zA-z0-9.?,]", "").replaceAll("([ .,?])\\1+", "$1");
System.out.println(res);

推荐阅读