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

Posted

技术标签:

【中文标题】Python正则表达式,多行匹配模式..为啥这不起作用?【英文标题】:Python regex, matching pattern over multiple lines.. why isn't this working?Python正则表达式,多行匹配模式..为什么这不起作用? 【发布时间】:2011-04-01 20:39:54 【问题描述】:

我知道,为了解析,我最好删除所有空格和换行符,但我只是为了快速解决我正在尝试的事情而这样做,我不知道为什么它不起作用..我已经包装了不同的区域我的文档中的文本带有“####1”之类的包装器,并且正在尝试基于此进行解析,但无论我尝试什么,它都无法正常工作,我认为我正确使用了多行......任何建议都值得赞赏

这根本不返回任何结果:

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

####2   

ttest
####2'

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

【问题讨论】:

它不会运行句点,因为您没有使用多行字符串符号'''""" 好的,我完全错过了这个概念,我会仔细研究重新文档以找到它提到这个的地方......谢谢 您对string 的分配是语​​法错误。你的意思是使用''' 不,我是 python 新手,所以我不知道多行字符串分隔符 【参考方案1】:

试试re.findall(r"####(.*?)\s(.*?)\s####", string, re.DOTALL)(当然也可以和re.compile一起使用)。

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

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

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

【讨论】:

【参考方案2】:

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

re.M re.MULTILINE

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

re.Sre.DOTALL 使 . 甚至匹配新行。

来源

http://docs.python.org/

【讨论】:

以上是关于Python正则表达式,多行匹配模式..为啥这不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

用于匹配单行和多行注释的 Python 正则表达式。

使用正则表达式匹配多行文本

python 正则表达式,多行匹配,但仍想获取行号

Python re正则表达式速查

python第九十五天--js正则

正则表达式匹配换行