2014-01-11 84 views
2

我有一个大的多行字符串,其中多个条目遵循相似的格式。我想将它分成每个条目的字符串列表。使用python正则表达式将文本拆分成部分

我试过如下:

myre = re.compile('Record\sTime.*-{5}', re.DOTALL) 
return re.findall(myre, text) 

在这种情况下,项,其 '记录时间',并与结束 '-----'。上面的代码不是按照我想要的方式进行操作,而是返回一个项目,从第一个条目开始时开始,到最后一个结束时结束。

我大概可以找到一种方法,使用正则表达式来查找段的末尾,然后从原始文本片段开始重复,但似乎凌乱。

回答

1

事情是这样的:

txt='''\ 
Record Time 
1 
2 
3 
----- 

Record Time 
4 
5 
----- 
Record Time 
6 
7 
8 
''' 

import re 
pat=re.compile(r'^Record Time$(.*?)(?:^-{5}|\Z)', re.S | re.M) 
for i, block in enumerate((m.group(1) for m in pat.finditer(txt))): 
    print 'block:', i 
    print block.strip() 

打印:

block: 0 
1 
2 
3 
block: 1 
4 
5 
block: 2 
6 
7 
8 
1

你可以利用这一点避免不情愿的量词,它是一招效仿的原子团:(?=(...))\1 。它不完全在主题中,但它可以是有用的:

myre = re.compile('Record\sTime(?:(?=([^-]+|-(?!-{4})))\1)+-{5}')