您可以使用\p{L}
而不是a-zA-Z
:
string = string.replaceAll("[^-_/.,\\p{L}0-9 ]+","")
\p{L}
匹配所有 Unicode 字母,无论在正则表达式编译时传递了哪些修饰符。
请查看此
Java 测试:
List<String> strs = Arrays.asList("!@#Łąka$%^", "Word123-)(=+");
for (String str : strs)
System.out.println("\"" + str.replaceAll("[^-_/.,\\p{L}0-9 ]+","") + "\"");
输出:
"Łąka"
"Word123-"
模式细节: [^-_/.,\\p{L}0-9 ]+
模式匹配除了 -
, _
, _
, /
, .
, ,
, Unicode 字母,ASCII 数字和空格之外的任何字符。
请注意,使用此解决方案仍会删除 Unicode 数字,例如 ٠١٢٣٤٥٦٧٨٩
。
您可以使用Mena建议的 \p{Alnum}
,但必须使用(?U)
嵌入式标志选项来真正匹配所有 Unicode 字母和数字:
string = string.replaceAll("(?U)[^-_/.,\\p{Alnum} ]+","")
如果只想删除非常见欧洲字母以外的Unicode字母,只需添加À-ÿ
并从该范围中减去两个非字母字符×÷
:
string = string.replaceAll("(?U)[^-_/.,A-Za-zÀ-ÿ &&[^×÷]]+","")
replaceAll("...", "")
来 "接受" 任何内容或者 "获取" 什么,而是要 "移除" 字符。你需要移除什么?请提供一个示例。对于"łąka123!@#$%^&*()_+"
,预期输出是什么? - Wiktor Stribiżew