2016-07-29 65 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

不,正则表达式不理想。而且格式也不理想。 –