2012-07-07 74 views
0

Python和正则表达式我尝试匹配重复/重叠花样/块等重叠图案的正则表达式

04/00127-48 
U 05062012 
A: SAKARK 
T_ Par.: dsfsd 

04/00127-48 
U 05062012 
A: SAKARK 
T_ Par.: dsfsd 
04/00168-42 
U 05062012 
A: SAKARK 
T_ Par.: fdfs 
04/00168-43 
U 05062012 
A: SAKARK 
T_ Par.: fdfs 

我试图

'(?=(\d+\/.*))' 

这似乎工作

'((\d+\/.*?)=?\d+\/) 

但有没有更好的方法?

+1

我很困惑,你试图提取哪些模式?你预期的结果是什么? – 2012-07-07 18:14:10

+0

对不起的问题,我想匹配文本块 – user642897 2012-07-07 18:23:32

+0

请参阅Marco de Wit的回答。注意他使用're.DOTALL'标志。 – 2012-07-07 18:31:05

回答

2

这回答了你的问题:

re.findall(r'.+?(?=\d\d\/|$)',s,re.DOTALL) 

re.DOTALL需要让.比赛结束线。

在正则表达式前面的r使它成为一个原始字符串,因此带反斜杠的转义保留原样,因此正则表达式函数将处理它们。这里不需要,但仍然是正则表达式的好习惯。

你的问题不是很清楚。也许这比你想要的更好?

list(zip(*[iter(s.splitlines())]*4)) 

它给出了元组列表。