Python 为什么这个正则表达式不匹配HTML标记?
我正在用python编写一个HTML解析器,为了从标记中提取HTML属性,我正在使用正则表达式。这是我正在使用的表达式Python 为什么这个正则表达式不匹配HTML标记?,python,regex,Python,Regex,我正在用python编写一个HTML解析器,为了从标记中提取HTML属性,我正在使用正则表达式。这是我正在使用的表达式 tag_exp = r'</?(?P<name>[a-z A-Z]+) (?P<attribute>[a-z A-Z]+="[\w]+")* /?>' matches = re.match(tag_exp, '<img src="test.jpg" alt="test">') 但它与任何东西都不匹配。我一直在想,我做错了什么?改
tag_exp = r'</?(?P<name>[a-z A-Z]+) (?P<attribute>[a-z A-Z]+="[\w]+")* /?>'
matches = re.match(tag_exp, '<img src="test.jpg" alt="test">')
但它与任何东西都不匹配。我一直在想,我做错了什么?改用BeautifulSoup。检查这个例子
import BeautifulSoup
html = '<p class="c4">SOMETEXT</p><p class="c5"></p>'
soup = BeautifulSoup.BeautifulSoup(html)
print [tag.attrs for tag in soup.findAll('p') if tag.string]
Python为此提供了很多库。使用它们,它们比正则表达式更好。你不能用正则表达式解析HTML。甚至不要尝试。Regex不是用来扫描HTML文档的。这就像打开遗忘之门,释放海怪,挖掘恶臭…*sic*请像编写解析器一样使用库。看起来应该很容易,但实际上根本不可能,因为HTML不是一种常规语言,从技术上讲,它是一种上下文无关的语言,但这完全是另一种蠕虫。正如其他人所说,为此使用适当的HTML/XML解析器。