字符串拆分,包括重音字符的单词

时间:2013-03-06 19:29:08

标签: java regex

我正在使用这个正则表达式:

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

如何修改此正则表达式以包含重音字符? (á,ã,õ等......)

5 个答案:

答案 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)

您可以随时将所需的字符列入白名单,而不是将您不想要的所有字符列入黑名单:

^[^<>%$]*$

表达式[^(这里有很多字符)]只匹配未列出的任何字符。

但这是个人观点。