Rob*_*icR 6 java regex unicode
假设我有以下代码:
String description = "????? ? ? This description ?? ? ? ? is a mess. ? ? ?????";
Run Code Online (Sandbox Code Playgroud)
我想删除非拉丁字符:?
,?
,?
,?
,?
,?
和?
.
它变成了这个: This description is a mess.
我知道可能有很多类似于翼状的角色,所以不要指定我想删除的内容,我认为最好列出我想要保留的内容:基本拉丁语和拉丁语1补充字符.
我发现我可以使用以下代码删除除基本拉丁字符之外的所有内容
String clean_description = description.replaceAll("[^\\x00-\\x7F]", "").trim();
但有没有办法保留Latin-1补充字符?
通过查看您提供的字符范围,似乎"Basic Latin"和"Latin-1 Supplements"相邻(0x00
- 0x7F
和0x80
- 0xFF
).
因此,您可以使用您提供的相同正则表达式,只需扩展为包含"Latin-1 Supplement"字符.这看起来像这样:
String clean_description = description.replaceAll("[^\\x00-\\xFF]", "").trim();
Run Code Online (Sandbox Code Playgroud)
正如Quinn的评论所指出的,这并没有消除被删除部分之间的空间,因此结果有多余的空间(可能是也可能不是你想要的).如果你想删除那些空格,Quinn的正则表达式([^(\\x00-\\xFF)]+(?:$|\\s*)
如果删除了注释)可能适合你.
如果您想要更具描述性的表达式,请使用以下命令:
description.replaceAll( "[^\\p{InBasic_Latin}\\p{InLatin-1Supplement}]", "" );
Run Code Online (Sandbox Code Playgroud)
或否定的交集[\P{InBasic_Latin}&&\P{InLatin-1Supplement}]
(不是说它更易读;))
归档时间: |
|
查看次数: |
2702 次 |
最近记录: |