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.S
或 re.DOTALL
使 .
甚至匹配新行。
来源
http://docs.python.org/
【讨论】:
以上是关于Python正则表达式,多行匹配模式..为啥这不起作用?的主要内容,如果未能解决你的问题,请参考以下文章