java - 如何删除特殊字符而不删除另一种语言的文本?

标签 java regex

我使用下面的代码从字符串中删除笑脸和特殊字符

String utf8TweetText  = tweet.getText();
Pattern unicodeOutliers = Pattern.compile("[^\\x00-\\x7F]",
                                    Pattern.UNICODE_CASE | Pattern.CANON_EQ
                                            | Pattern.CASE_INSENSITIVE);
Matcher unicodeOutlierMatcher = unicodeOutliers.matcher(utf8TweetText );
                utf8TweetText  = unicodeOutlierMatcher.replaceAll(" "); 

这对于英语来说非常有用。

但是,如果我的文本是这样的乌尔都语:

تحریک 

انصاف نے زینب کے قتل کے خلاف مذمتی قرارداد سندھ اسمبلی میں جمع کرا دی

 کراچی:مذمتی قرارداد تحریک انصاف کے رکن…

然后它将乌尔都语中的所有文本替换为空格。

如何从字符串中删除特殊字符,但确保它不会删除乌尔都语文本?

最佳答案

所有非单词字符都可以与 \W 速记字符类匹配,并且要使其能够识别 Unicode,您只需传递 Pattern.UNICODE_CHARACTER_CLASS 即可。 (或 (?U) 内联嵌入标志选项)到正则表达式编译器:

s = s.replaceAll("(?U)\\W", " ");

请参阅Java online demo .

如果您还需要删除 _ 字符(它被视为单词字符),请将 \W_ 添加到字符类中:

s = s.replaceAll("(?U)[\\W_]", " ");

要将 1 个以上特殊字符替换为单个空格,请在模式后添加 + 量词:

s = s.replaceAll("(?U)[\\W_]+", " ");

关于java - 如何删除特殊字符而不删除另一种语言的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48205486/

相关文章:

java - hybris java代码更改无需重新启动服务器

java - Red Hat Tomcat 7容器上java的Heapsize等内存配置

javascript - Regex/Jquery - 返回空值

regex - 在 XSLT/XQuery 正则表达式中,对交替表达式的求值是否有要求的顺序?

python - 如何解析包含不确定数据模式的日志文件?

javascript - 获取 JavaScript 正则表达式中每个捕获的索引

java - 2类和外部库的JAVA编译问题

java - 抽象类是否应该有一个 serialVersionUID

java - JSONObject 与列表到字符串到 JsonNode

javascript - 在 .replace() 中创建一个函数