2016-04-15 61 views
1

我需要拆分此字符串:如何在java中拆分這個字符串需要regex?

COMITATO: TRIESTE Indirizzo legale: VIA REVOLTELLA 39 34139 
Trieste (Trieste) Mob.: 3484503368 Fax: 040310096 Sito web: www.csentrieste.it/ 

想要的結果必須是一個數組,如:

{COMITATO:,TRIESTE,Indirizzo legale:,VIA REVOLTELLA 39 34139 
Trieste (Trieste) ,Mob.:,3484503368,Fax:,Sito web:,www.csentrieste.it/} 

問題也是字符串的某些屬性可以被丟失,所以我不能使用拆分像屬性的標題 「COMITATO:」 或 「Indirizzo LEGALE:」

例如:如果 「Indirizzo LEGALE:」 失去的字符串將出現這樣的:

COMITATO: TRIESTE Mob.: 3484503368 Fax: 040310096 Sito web: www.csentrieste.it/ 
+0

一個空格後跟字隨後'第一分割:',然後通過空間分割的每個,設定限制到2項。你到目前爲止嘗試了什麼? –

+0

不能使用單詞進行分割,因爲它可能會改變一些單詞並且不存在。 –

+0

我的意思不是*特殊的單詞*,而是*任何單詞*。你熟悉[lookaheads](http://www.regular-expressions.info/lookaround.html)嗎?他們也可以在'String#split()'中使用 –

回答

1

那麼,這個正則表達式將解析您給出輸入:

(?<firstname>.*?):\s*(?<lastname>\w+)(?:(?<occupation>[^:]+):\s*(?<address>.+\n.+))?\sMob.:\s*(?<mobile>\d+)\s*Fax:\s*(?<fax>\d+)\s*Sito web:\s*(?<website>.*) 

我們可以通過使用命名組挽回一些可讀性和結果都很方便。這個正則表達式沒什麼太聰明之處,我們只是通過字符串爬行,使用我們可以錨定模式的靜態結構:冒號,「Mob」,「Fax」和「Sito web」。顯然,「可能缺少」地址部分是可選的。

regex demo here