正则表达式包括所有西班牙语字符和数字

时间:2017-10-20 13:43:32

标签: java regex

我有一个Java应用程序,我需要有一个正则表达式来替换除字符和数字之外的所有字符(包括强调元音和ñ/Ñ的西班牙字符)。它还需要包含一些特定的空格字符。

我创建了以下regEx,但它也删除了强调的元音,这不是想法

string.replaceAll("[^-_/.,a-zA-Z0-9 ]+","")

我只是想接受那些角色......而不是像æ,å或其他人那样......

3 个答案:

答案 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ñáéíóúü],这对我有用。