Python正则表达式,匹配多行的模式..为什么这不起作用?

时间:2010-08-20 20:09:57

标签: python regex parsing

我知道,对于解析我理想情况下应该删除所有空格和换行符,但我只是这样做是为了快速修复我正在尝试的东西,我无法弄清楚为什么它不起作用..我已经包装了不同的区域我的文档中包含“#### 1”这样的包装器的文本,我正在尝试基于此进行解析,但无论我尝试什么,它都无法正常工作,我认为我正在使用多行...任何建议都表示赞赏

这根本不会返回任何结果:

string='
####1
ttteest
####1
ttttteeeestt

####2   

ttest
####2'

import re
pattern = '.*?####(.*?)####'
returnmatch = re.compile(pattern, re.MULTILINE).findall(string)
return returnmatch

2 个答案:

答案 0 :(得分:23)

多行并不意味着.会匹配行返回,这意味着^$仅限于行

  

re.M被   re.MULTILINE

     

当指定时,模式字符'^'匹配在字符串的开头和每行的开头(紧跟在每个换行符之后);并且模式字符'$'>在字符串的末尾和每行的末尾(紧接在每个>换行符之前)匹配。默认情况下,'^'仅匹配字符串的开头,'$'仅匹配字符串的>末尾,紧接在字符串末尾的换行符(如果有)之前。

re.Sre.DOTALL使.与新行匹配。

<强>来源

http://docs.python.org/

答案 1 :(得分:14)

尝试re.findall(r"####(.*?)\s(.*?)\s####", string, re.DOTALL)(当然也适用于re.compile。)

此正则表达式将返回包含节的编号和节内容的元组。

对于您的示例,这将返回[('1', 'ttteest'), ('2', ' \n\nttest')]

(顺便说一句:您的示例不会投放,对于多行字符串,请使用'''"""