如何用单条正则表达式将重复的空格、感叹号、问号替换为单个对应字符
解决方法
你之前的写法不生效的核心原因是[ !?]+仅匹配三类字符的连续序列,没有设置捕获分组,因此替换值$1无法获取到对应匹配内容,最终替换结果和原内容一致。
正确的实现方案如下:
- 匹配规则:
([ !?])\1+ - 替换值:
$1
实现原理
([ !?])为捕获分组,会匹配空格、感叹号、问号三者中的任意一个字符,并将匹配结果存入分组1\1+匹配与分组1内容完全一致的字符,且要求该字符连续出现1次及以上- 整体匹配到的就是某一类目标字符的连续重复序列,替换为
$1即可保留单个该字符
代码示例
Java 示例
String rawStr = "这是 测试 内容!!! 请问?? 对不对???"; String result = rawStr.replaceAll("([ !?])\\1+", "$1"); // 输出结果:这是 测试 内容! 请问? 对不对?
JavaScript 示例
const rawStr = "这是 测试 内容!!! 请问?? 对不对???"; const result = rawStr.replace(/([ !?])\1+/g, '$1'); // 输出结果:这是 测试 内容! 请问? 对不对?
内容的提问来源于stack exchange,提问作者Hasen
相关产品推荐
相关产品推荐

