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

Ric*_*ick 13 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
Run Code Online (Sandbox Code Playgroud)

Col*_*ert 24

多行不意味着.将匹配线回归,这意味着^$被限制为只行

re.M re.MULTILINE

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

re.Sre.DOTALL使.匹配甚至新线.

资源

http://docs.python.org/


leo*_*luk 15

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

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

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

(顺便说一句:你的例子不会运行,对于多行字符串,请使用'''""")