如何合并正则表达式以仅保留英文与阿拉伯字母字符?
合并正则保留英文与阿拉伯字符
原代码的问题在于两次替换逻辑互斥:第一次删掉了所有非英文的字符(包括阿拉伯文和空格),第二次又删掉了所有非阿拉伯的字符(剩下的英文),最终自然为空字符串。
要实现仅保留英文、阿拉伯字符(以及示例中的空格),只需用一个否定字符类的正则,一次性匹配所有不需要保留的字符并替换为空:
String str = "123hello!#$% مرحبا. ok"; // 保留英文、阿拉伯字符和空格,删除其他所有字符 str = str.replaceAll("[^a-zA-Z\\p{InArabic}\\s]", ""); System.out.println(str); // 输出:hello مرحبا ok
正则说明
[^...]:否定字符类,匹配所有不在括号内的字符a-zA-Z:匹配英文大小写字母\\p{InArabic}:匹配阿拉伯语字符(Java中\需要双写转义)\\s:匹配空白字符(如果不需要保留空格,直接去掉这部分即可)
如果只需要严格保留字母(不含空格),把正则改成 [^a-zA-Z\\p{InArabic}] 就行,输出会变成helloمرحباok。
内容的提问来源于stack exchange,提问作者Regex
相关产品推荐
相关产品推荐

