我有一个Java应用程序,我需要有一个正则表达式来替换除字符和数字之外的所有字符(包括强调元音和ñ/Ñ的西班牙字符)。它还需要包含一些特定的空格字符。
我创建了以下regEx,但它也删除了强调的元音,这不是想法
string.replaceAll("[^-_/.,a-zA-Z0-9 ]+","")
我只是想接受那些角色......而不是像æ,å或其他人那样......
答案 0 :(得分:1)
您可以使用\p{L}
代替a-zA-Z
:
string = string.replaceAll("[^-_/.,\\p{L}0-9 ]+","");
\p{L}
匹配所有Unicode字母,无论传递给正则表达式编译的修饰符。
查看Java test:
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 ]+
模式匹配-
,_
,_
,/
以外的任何字符,{ {1}},.
,Unicode字母,ASCII数字和空格。
请注意,使用此解决方案,您仍会删除Unicode数字,例如,
。
您可以使用Mena's suggested ٠١٢٣٤٥٦٧٨٩
但与(?U)
embedded flag option重新匹配所有Unicode字母和数字:
\p{Alnum}
要仅删除普通欧洲字母以外的Unicode字母,只需添加string = string.replaceAll("(?U)[^-_/.,\\p{Alnum} ]+","");
并从此范围中减去两个非字母À-ÿ
:
×÷
答案 1 :(得分:0)
您可以使用Alnum
脚本替换所有字母字符和数字,包括重音字符:
"[^-_/.,\\p{Alnum} ]+"
请参阅docs:
\ p {Alnum}一个字母数字字符:[\ p {Alpha} \ p {Digit}]
请注意,您的替换目前会影响所有字母字符等。
如果您想要实际否定该自定义类(从而替换那里的不>的所有内容),请使用:
"[^[-_/.,\\p{Alnum} ]]+"
(请注意^
后面的其他方括号,否则会被解释为文字^
)。
修改强>
您可以使用以下方法进一步缩小到拉丁字符块的子集:
String s = "a1᣹";
System.out.println(
s.replaceAll("[^[-_/.,\\p{InBASIC_LATIN}\\p{InLATIN_1_SUPPLEMENT}0-9]]+","")
);
<强>输出强>
Łą
请注意,您在拉丁语1补充中仍会有一些非西班牙语字符,请参阅here。
如果您想进一步限制您的要求,您可能需要使用特定的西班牙语字符定义自己的(lenghty)字符类。
答案 2 :(得分:0)
您可以尝试在字符类 [ ... ]
中包含西班牙语特殊字符,毕竟只有 7 个。
我只需要小写字符,所以我使用了 [a-z]
而不是 [a-zñáéíóúü]
,这对我有用。