PythonFindall只查找最后一个匹配项

PythonFindall只查找最后一个匹配项,python,regex,Python,Regex,我正在尝试使用Python 2.7.5从网页中提取一些数据 代码: 为什么它只提取最后一个事件?如果我删除最后一次出现,第一次会被发现开始时的*非常贪婪,直到最后一次出现它都会消耗掉。事实上,表达式中的所有*都非常贪婪。因此,我们用?使它们不贪婪,如下所示 p = re.compile(r'.*?<section\s*id="(.+?)">(.+?)</section>.*?') p = re.compile(r'<section\s*id="(.+?)">

我正在尝试使用Python 2.7.5从网页中提取一些数据

代码:


为什么它只提取最后一个事件?如果我删除最后一次出现,第一次会被发现

开始时的
*
非常贪婪,直到最后一次出现它都会消耗掉。事实上,表达式中的所有
*
都非常贪婪。因此,我们用
使它们不贪婪,如下所示

p = re.compile(r'.*?<section\s*id="(.+?)">(.+?)</section>.*?')
p = re.compile(r'<section\s*id="(.+?)">(.+?)</section>')
事实上,您可以删除第一个和最后一个
*
模式,并像这样保持简单

p = re.compile(r'.*?<section\s*id="(.+?)">(.+?)</section>.*?')
p = re.compile(r'<section\s*id="(.+?)">(.+?)</section>')
p=re.compile(r'(.+?)'))

您的正则表达式需要更改如下:

p = re.compile(r'<section\s*id="(.+?)">(.+?)</section>')
p=re.compile(r'(.+?)'))

如果str是多行字符串,该如何更改?如果我添加、编译(..,re.MULTILINE)什么也找不到,但是如果我在找到所有内容之前替换str中的('\n',''),我自己发现:需要使用re.DOTALL标志
p = re.compile(r'<section\s*id="(.+?)">(.+?)</section>')