我正在使用这个正则表达式:
x.split("[^a-zA-Z0-9']+");
这将返回一个包含字母和/或数字的字符串数组。
如果我使用它:
String name = "CEN01_Automated_TestCase.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");
我得到了:
CEN01
Automated
TestCase
Java
但如果我使用它:
String name = "CEN01_Automação_Caso_Teste.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");
我得到了:
CEN01
Automa
o
Caso
Teste
Java
如何修改此正则表达式以包含重音字符? (á,ã,õ等......)
答案 0 :(得分:10)
来自http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
类似于
java.lang.Character boolean ismethodname
方法的类别(已弃用的方法除外)可通过相同的\p{prop}
语法获得,其中指定的属性名称为javamethodname
。
由于Character
类包含isAlphabetic
方法,您可以使用
name.split("[^\\p{IsAlphabetic}0-9']+");
您也可以使用
name.split("(?U)[^\\p{Alpha}0-9']+");
但您需要使用UNICODE_CHARACTER_CLASS
标记,可以在正则表达式中添加(?U)
来使用。
答案 1 :(得分:2)
我会查看Java Documentation on Regular Expressions。有一个unicode部分,我相信你可能正在寻找。
编辑:示例
另一种方法是匹配您正在寻找的字符代码。例如
\uFFFF where FFFF is the hexadecimal number of the character you are trying to match.
示例:\u00E0 matches à
如果您将其用作字符串文字,请认识到需要在Java中转义反斜杠。
详细了解here。
答案 2 :(得分:2)
您可以使用:
String[] names = name.split("[^a-zA-Z0-9'\\p{L}]+");
System.out.println(Arrays.toString(names));
将输出:
[CEN01,Automação,Caso,Teste,java]
有关详细信息,请参阅this。
答案 3 :(得分:1)
为什么不拆分分隔符?
String[] names = name.split("[_.]");
答案 4 :(得分:0)
您可以随时将所需的字符列入白名单,而不是将您不想要的所有字符列入黑名单:
^[^<>%$]*$
表达式[^(这里有很多字符)]只匹配未列出的任何字符。
但这是个人观点。