2013-08-29 25 views
0

我試圖用Java編寫的正則表達式匹配對錶達定期匹配對

「客戶

Customer Name    : JOHN DOE 

City     : Chicago 

Customer Id    : 123AWE32D2 

System Id    : 004349 

Register Date (yymmddww)  : 12020906 

作爲輸出我想要配對:

客戶名稱,李四 市,芝加哥 客戶ID,123AWE32D2 系統ID 004349 註冊日期(yymmddww),12020906

有很多種,數量的參數。我需要具有通用模式來提取組(參數名稱):(值)。這是我的方式,我寫了匹配特定PARAM:

\s*Customer Name\s*:\s*([^\n]*\S)

+2

我們不是在這裏做你的工作;看看'split'。 – Toto

回答

2

1)多模式使用此(.+):(.+)

含義:

. - 任何

: - 那麼我們就需要結腸

. - 再次東西

+ - 至少一個字符

你有2組,結腸癌之前和之後。

2)或簡單地使用split()方法 - split(":")

兩者後,使用trim()去除空格或正則表達式中刪除它們。

+0

您應該在多行模式下使用非貪婪匹配('(。+?):(。+?)')。 – collapsar

+0

在這種情況下,兩者都應該工作,我們只有一個':'在行中。 – Pawel

0

使用「多行」切換(?m),使^/$賽後/換行符前:

(?m)^\\s*(.+?)\\s*:\\s*(.+?)\\s*$ 

每場比賽將捕獲1組帕拉姆名稱和組值2

0

您可以試試這個

Matcher m = Pattern.compile("(?s)\\b(.+?):(.*?)\\b(.+?)\\n").matcher(your text); 
while (m.find()) 
    System.out.print(m.group(1).trim() + "," + m.group(3).trim() + " ");