2013-03-06 46 views
12

我使用此正则表达式:字符串分割,词语包括重音字符

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 

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

+1

如果Java支持unicode属性''[^ \ p {L}]'会相当健壮。不知道它是否通过... – Wrikken 2013-03-06 19:32:50

+1

@Wrikken:确实如此。 Java 7甚至以Unicode合理的方式支持'\ w'和'\ b'。 – 2013-03-06 20:53:01

+0

不错,我只是懒得去查,但很适合注意;) – Wrikken 2013-03-06 20:53:40

回答

9

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

男人,这是美丽的* - *。它也帮助了我。谢谢! – Jvam 2013-03-06 19:40:59

+0

很高兴喜欢它。你可以在[模式文档]中找到许多有用的信息(http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html):) – Pshemo 2013-03-06 19:41:52

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

+0

你可能是对的,但我的投票是在这里提交一个工作示例的。 – 2013-03-06 19:33:47

+1

查看更新的答案。 – 2013-03-06 19:41:41

1

为什么不在分隔符上分割?

String[] names = name.split("[_.]"); 
+0

谢谢!它帮助我解决了问题! – Jvam 2013-03-06 19:40:32

0

相反黑名单所有你不想要的字符,你总是可以whitlist你想要的字符,例如:

^[^<>%$]*$ 

表达[^(多字在这里)非常符合,是不是任何字符上市。

但这是一个人的意见。

2

您可以使用此:

String[] names = name.split("[^a-zA-Z0-9'\\p{L}]+"); 

System.out.println(Arrays.toString(names));将输出:

[CEN01,Automação,卡索,阿泰斯特,爪哇]

更多信息请参见this