2013-03-06 80 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