2014-01-11 129 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}')