java - 我应该在正则表达式中添加什么来删除出现超过 1 次的标点符号?
问题描述
我正在尝试编写一个正则表达式,它将删除出现超过 1 次的另一种语言的字母和标点符号。
从另一种语言中删除字母是通常的表达方式:
st = test.replaceAll("[^ a-zA-z0-9]" , "");
但我不明白我应该添加什么,以便它不会删除所有标点符号和空格,而只会删除那些出现超过 1 次的符号和空格:
String test = new String("agagahh,,,mvf .... AJFKL ???");
我很乐意提供帮助
输入 :"agagahh,,,mvf .... AJFKL ???"
输出:"agagahh,mvf . AJFKL ?"
解决方案
您可以先删除所有非字母数字字符或接受的标点符号之一。然后,您可以使用捕获组匹配一个标点符号,然后再匹配一个或多个相同的标点符号,以替换为单个标点符号。
String str = "agagahh,,,mvf .... AJFKL ???";
String res = str.replaceAll("[^ a-zA-z0-9.?,]", "").replaceAll("([ .,?])\\1+", "$1");
System.out.println(res);
推荐阅读
- c# - 以编程方式调用存储在字典中的抽象类的方法?
- active-directory - 未能打开组策略对象。您可能没有适当的权利
- apache-spark - 无法流式传输来自 Kafka Debezium 连接器的 avro 格式数据
- python - 使用 skopt 进行超参数优化后保存 keras 模型时出错
- c# - 将文件添加到 ClickOnce 应用程序
- java - 在 Java 和 Android 中设置 24 小时的变量值
- c# - 如何自动将值传递给我的控制器
- python - 为具有特定条件的每个组提供数据帧的排序子集
- angularjs - 未知的提供者:Yeoman AngulajrJS 生成的应用程序中的 aProvider 错误
- android - 使用 Dagger 2 注入 Androidx 片段