添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我需要从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...
    
2 个评论
python
regex
Stan
Stan
发布于 2011-10-11
3 个回答
Petr Viktorin
Petr Viktorin
发布于 2011-10-11
已采纳
0 人赞同

不要使用正则表达式来解析HTML。

但如果你需要在一个字符串中找到所有的regexp匹配,可以使用findall function.

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']
    
美国是做什么的?
使得'.'特殊字符可以匹配任何字符,包括换行;如果没有这个标志,'.'将匹配任何字符。except一个换行。(docs.python.org/2/library/re.html#re.S )
哦,我明白了,我确实去看了网页,但没有看懂文件,因为re.S下面什么都没有,但现在我知道怎么看文件了,re.S和re.DOTALL是一样的......谢谢!
不客气!re.DOTALL更清楚了,我已经更新了答案。
moyo
这是最好的方法。只是为了确认,由于findall返回的是一个正常的数组,访问结果有match[0]、match[1]等
Aamir Rind
Aamir Rind
发布于 2011-10-11
0 人赞同

不要使用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?'