如何用单条正则表达式语句实现空格转下划线并移除括号?
嘿,这事儿很简单!你完全可以把两步操作合并成一行代码,甚至有两种实用的实现方式:
方式一:链式调用(最直观且兼容所有Java版本)
直接把两个replaceAll调用连起来,执行逻辑和你原来的两步完全一致:
abc = abc.replaceAll("\\s+", "_").replaceAll("[()\\[\\]{}]", "");
先把所有连续空格替换成下划线,再一次性移除所有圆括号、方括号、花括号(不管是否匹配成对)。
方式二:单个replaceAll调用(Java 9+适用)
如果你想用一个replaceAll搞定,可以利用Java 9新增的函数式替换逻辑,通过正则匹配两种模式后返回对应替换值:
abc = abc.replaceAll("\\s+|[()\\[\\]{}]", matchResult -> matchResult.group().matches("\\s+") ? "_" : "" );
这个正则用|分隔了两种匹配规则(连续空格/各类括号),再通过lambda判断匹配内容:如果是空格就替换成下划线,是括号就直接移除。
验证你的测试用例
- 输入
hello world (English)→ 先转为hello_world_(English)→ 最终得到hello_world_English - 输入
hello world ((((English→ 先转为hello_world_((((English→ 最终得到hello_world_English
完全符合你的预期输出!
另外提一句,你之前尝试的\\p{P}会移除所有标点符号,范围太宽泛了,直接指定需要移除的括号字符会更精准。
内容的提问来源于stack exchange,提问作者user9130953
相关产品推荐
相关产品推荐

