2013-09-24 45 views
1

我有以下字符串被解析:集團正則表達式多次出現

 
Field 1:Value 1 
Overriden Field 2: 
     Value 2.1 
     Value 2.2 
Field 3: 
     Value 3 
Overriden Field 4:Value 4 
Field 5:Value5 

基本上域值對用冒號隔開,和場(並不總是與「現場啓動... 「)從一個新行開始,後面跟着一個冒號。我想提取重寫字段值對,所以我可以有兩個(或多個)字符串:一個是「Overriden Field 2:... Value 2.2」,另一個是「Overriden Field 4:Value 4」。

我不知道有多少重寫字段,但它們都以「Overriden」開頭。我不確定分組可以提供幫助。

我能想到的最好的方法是使用re.findAll()來搜索的出現「重寫[^:] :[^:]:」所以我會得到兩個結果:

  • 重寫字段2:...字段3:
  • 重寫字段4:...字段5:

然後,我將不得不砍掉的最後部分「\ n [^:] *:」。這看起來不聰明。

任何人想給一些建議?

+0

如果您覺得我的回答對您有幫助,您可以[接受它](http://meta.stackexchange.com/a/5235/192545)? – Jerry

回答

0

您或許可以使用這樣的事情:

\s*([^:]+)\s*:\s*((?:[^:](?![^:\n]+:))+)\s* 

[我把\s*只是爲了避免尾隨空格和/或換行,他們可以在不改變核心內容,以獲得被刪除。

regex101 demo

正則表達式的開始:

([^:]+):([^:]+) 

然後,我改變了第二部分((?:[^:](?![^:\n]+:))+)這確保沒有在同一行一個:(這將意味着它進入一個值的頂部的字段)。