Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这个正则表达式不匹配HTML标记?_Python_Regex - Fatal编程技术网

Python 为什么这个正则表达式不匹配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">') 但它与任何东西都不匹配。我一直在想,我做错了什么?改

我正在用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">')

但它与任何东西都不匹配。我一直在想,我做错了什么?

改用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解析器。