我有一个Java应用程序,我需要一个正则表达式来替换除字符和数字之外的所有字符(包括西班牙字符作为重读元音和\xc3\xb1/\xc3\x91)它还需要包含一些特定的空格字符。
\n\n我创建了以下正则表达式,但它也删除了重读元音,这不是这个想法
\n\nstring.replaceAll("[^-_/.,a-zA-Z0-9 ]+","")\n
Run Code Online (Sandbox Code Playgroud)\n\n我只是想接受这些字符..而不是其他字符,例如 \xc3\xa6、\xc3\xa5 或其他字符..
\n您可以使用\\p{L}
而不是a-zA-Z
:
string = string.replaceAll("[^-_/.,\\\\p{L}0-9 ]+","");\n
Run Code Online (Sandbox Code Playgroud)\n\n\\p{L}
无论传递给正则表达式编译的修饰符如何,都会匹配所有 Unicode 字母。
查看Java 测试:
\n\nList<String> strs = Arrays.asList("!@#\xc5\x81\xc4\x85ka$%^", "Word123-)(=+");\nfor (String str : strs)\n System.out.println("\\"" + str.replaceAll("[^-_/.,\\\\p{L}0-9 ]+","") + "\\"");\n
Run Code Online (Sandbox Code Playgroud)\n\n输出:
\n\n"\xc5\x81\xc4\x85ka"\n"Word123-"\n
Run Code Online (Sandbox Code Playgroud)\n\n模式详细信息:模式匹配除、、、、、、 Unicode 字母、ASCII 数字和空格[^-_/.,\\\\p{L}0-9 ]+
之外的任何字符。-
_
_
/
.
,
请注意,使用此解决方案,您仍将删除 Unicode 数字,例如\xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3\xd9\xa4\xd9\xa5\xd9\xa6\xd9\xa7\xd9\xa8\xd9\xa9
.
您可以使用Mena 建议的 \\p{Alnum}
但带有(?U)
嵌入标志选项来真正匹配所有 Unicode 字母和数字:
string = string.replaceAll("(?U)[^-_/.,\\\\p{Alnum} ]+","");\n
Run Code Online (Sandbox Code Playgroud)\n\n要仅删除常见欧洲字母以外的 Unicode 字母,只需从此范围中添加\xc3\x80-\xc3\xbf
和减去两个非字母 ,即可:\xc3\x97\xc3\xb7
string = string.replaceAll("(?U)[^-_/.,A-Za-z\xc3\x80-\xc3\xbf &&[^\xc3\x97\xc3\xb7]]+","");\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
15294 次 |
最近记录: |