2016-07-29 28 views
0

我有一個python片段,它使用正則表達式返回兩個字符串內的內容。在Python中返回反向字符串選擇

res = re.search(r'Presets = {(.*)Version = 1,', data, re.DOTALL) 

我現在想要做的是返回圍繞這個內部部分的兩個字符串。請記住,這是一個多行字符串。我怎樣才能得到邊界字符串,在兩部分列表中的開始和結束部分將是理想的。

data = """{ 
    data = { 
     friends = { 
      max = 0 0, 
      min = 0 0, 
     }, 
     family = { 
      cars = { 
       van = "honda", 
       car = "ford", 
       bike = "trek", 
      }, 
      presets = { 
       location = "italy", 
       size = 10, 
       travelers = False, 
      }, 
      version = 1, 
     }, 
    }, 
    stuff = { 
     this = "great", 
    }, 
}""" 

import re 


res = re.search(r'presets = {(.*)version = 1,', data, re.DOTALL) 
print res.groups(1) 

在這種情況下,我希望回到開頭的字符串:

data = """{ 
    data = { 
     friends = { 
      max = 0 0, 
      min = 0 0, 
     }, 
     family = { 
      cars = { 
       van = "honda", 
       car = "ford", 
       bike = "trek", 
      }, 

和最終字符串:

 }, 
    }, 
    stuff = { 
     this = "great", 
    }, 
}""" 
+0

你能比「內部」或「外部」字符串更具體嗎? – BrandonM

+0

請爲上面的例子添加一個希望輸出的例子。 – jsbueno

+0

@BrandonM更新了問題。 – JokerMartini

回答

1

正則表達式是真的不解析這些字符串的好工具,但你可以使用re.split來實現你想要的。它甚至可以結合2個任務爲一:

begin, middle, end = re.split(r'presets = \{(.*)version = 1,', data, 
    flags=re.DOTALL) 

re.split處分割位置匹配字符串;通常分隔符不在結果列表中。但是,如果正則表達式包含捕獲組,則第一組的匹配內容將返回到分隔符位置。

+0

這是完美的! – JokerMartini

+0

你說這不太理想,那麼你會推薦什麼? – JokerMartini

+0

不,正則表達式不理想。而且格式也不理想。 –