Python - 使用正则表达式查找多个匹配并打印出来

时间:2011-10-11 11:03:25

标签: python regex

我需要从HTML源文件中找到表单的内容,我做了一些搜索并找到了很好的方法来做到这一点,但问题是它只打印出第一个找到的,我怎么能循环它并输出所有表格内容,而不仅仅是第一个?

line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matchObj = re.search('<form>(.*?)</form>', line, re.S)
print matchObj.group(1)
# Output: Form 1
# I need it to output every form content he found, not just first one...

3 个答案:

答案 0 :(得分:49)

Do not use regular expressions to parse HTML.

但是如果您需要在字符串中找到所有正则表达式匹配项,请使用findall函数。

import re
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matches = re.findall('<form>(.*?)</form>', line, re.DOTALL)
print(matches)

# Output: ['Form 1', 'Form 2']

答案 1 :(得分:21)

而不是使用re.search使用re.findall,它会返回List中的所有匹配项。或者您也可以使用re.finditer(我最喜欢使用它)它将返回Iterator Object,您可以使用它来迭代所有找到的匹配。

line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
for match in re.finditer('<form>(.*?)</form>', line, re.S):
    print match.group(1)

答案 2 :(得分:4)

为此目的使用正则表达式是错误的方法。由于您使用的是python,因此您可以使用非常棒的库从HTML文档中提取部件:BeautifulSoup