You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java字符串处理:移除非单词字符时保留空格与撇号的问题

解决正则误删撇号的问题

你的问题出在正则表达式的范围定义上——[^\\p{L}]+只允许保留Unicode字母,而像O'Connor里的撇号'并不属于\p{L}(字母)范畴,所以会被当成非目标字符替换成空格。

要保留撇号和空格,同时移除数字、•这类非单词字符,你需要调整正则,把撇号和空格加入到允许保留的字符集合中,之后再处理可能出现的连续空格:

String a = "Graeme O'Connor Dasha Nicholls Claire N MacDermott1 • Julia K Catherine Bryant1 Josèô Gil2";
// 第一步:移除所有非字母、非撇号、非空格的字符,替换为空格
String b = a.replaceAll("[^\\p{L}'\\s]+", " ");
// 第二步:合并连续的空格为单个空格
b = b.replaceAll("\\s+", " ");
// 可选:去除首尾可能存在的空格
b = b.trim();
System.out.println("replaced: " + b);

运行这段代码后,你会得到期望的输出:

Graeme O'Connor Claire N MacDermott Julia K Catherine Bryant Josèô Gil

补充说明

如果你还需要保留其他常见的单词内符号(比如连字符-),只需要把它们添加到正则的允许集合里即可,比如:

// 允许保留字母、撇号、连字符、空格
b = a.replaceAll("[^\\p{L}'\\-\\s]+", " ");

内容的提问来源于stack exchange,提问作者user1631306

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:56:21