2012-04-04 57 views
-1

我有一大堆在他們的信息的一些文本文件。他們中的大多數句子都以特定的信息列表開頭。現在我可以使用其他正則表達式代碼(用於日期,網址,電子郵件等)提取一些項目,以便我使用它們。但對於其他信息,我不知道從哪裏開始......。正則表達式 - 句開始

例如:

ITEM_LIST_1 = xxxx . 
ITEM_LIST_2 = xxxx . 
ITEM_LIST_3 = xxxx . 
.... 

我希望創建一個正則表達式,將提取XXXX的(刑罰)的具體項目。

THX所有

+0

什麼樣的正則表達式,Java的正則表達式的? – cctan 2012-04-04 05:51:17

+0

是java的正則表達式。 – 2012-04-04 05:53:37

+0

'^ [^ \ s] + =([^ \ s] +)''? – 2012-04-04 05:54:10

回答

2
(?<=ITEM_LIST_\d+ =).*(?= \.) 

應與您的示例xxxx以上。不過,它需要一個允許任意長度查找的正則表達式引擎。大多數不(.NET)。

另一種選擇是

ITEM_LIST_\d+\s*=\s*(.*)\s*\. 

,並使用匹配號碼1.這不需要環視,但比賽比你更需要和使用捕獲組來選擇總比賽的一個子。

兩個可能是微調,以你的問題具有更好的性能和更低的匹配做錯事的機會,如果我們知道您的xxxx是什麼。

編輯:如果項目都在一個單一的線,那麼上述正則表達式將失敗(因爲它是貪婪):

PS> [regex]::matches('Item_List_01 = Chapter1 overview, Who''s who, Chapter2 How to. Item_List_02 = Continue of Chapter2, Problems.', 'Item_List_\d+\s*=\s*(.*)\.') | select groups 

Groups 
------ 
{Item_List_01 = Chapter1 overview, Who's who, Chapter2 How to. Item_List_02 = Continue of Chapter2, Problems., Chapt... 

您可以通過它懶修復:

Item_List_\d+\s*=\s*(.*?)\. 

這不工作,則:

PS> [regex]::matches('Item_List_01 = Chapter1 overview, Who''s who, Chapter2 How to. Item_List_02 = Continue of Chapter2, Problems.', 'Item_List_\d+\s*=\s*(.*?)\.') | select groups 

Groups 
------ 
{Item_List_01 = Chapter1 overview, Who's who, Chapter2 How to., Chapter1 overview, Who's who, Chapter2 How to} 
{Item_List_02 = Continue of Chapter2, Problems., Continue of Chapter2, Problems} 

但是,它會˚F AIL如果再物品有一個全停在他們:

PS> [regex]::matches('Item_List_01 = Foo. Bar. Item_List_02 = Baz, gak.', 'Item_List_\d+\s*=\s*(.*?)\.') | select groups 

Groups 
------ 
{Item_List_01 = Foo., Foo} 
{Item_List_02 = Baz, gak., Baz, gak} 

這可以通過(再)將在先行來解決這確保了無論是行/字符串的結束或其它物品如下:

Item_List_\d+ = (.*?)\.(?=$| Item_List_\d) 

(關於空間,\s*等:我已經在改變整個空間的解決方案處理了幾次一點不馬虎這裏。你應該知道你期望的數據並相應地調整正則表達式。您還在你的問題和意見變化的ITEM_LIST/Item_List的情況。你應該是一致的,太。)

+0

例如:Item_List_01 = Chapter1概述,Who's who,Chapter2如何。 Item_List_02 =繼續第2章,問題。 etc ... – 2012-04-04 06:00:55

+0

它總是ITEM_LIST ...從我身邊的錯字。正則表達式將用於一個小型的java程序。以上所有Thx。 – 2012-04-04 06:54:06