我需要从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...
答案 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。