问题陈述:
我必须验证HTML内容中所有元素的ID值。 ID值规则是: -
ID值必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“_”) ),冒号(“:”)和句号(“。”)。
正则表达式代码
>>> content
'<div id="11"> <p id="34"></p><div id="div2"> </div></div>'
>>> all_ids = re.findall("id=\"([^\"]*)\"", content)
>>> id_validation = re.compile("[A-Za-z][\-A-Za-z0-9_:\.]*$")
>>> invalid_ids = [i for i in all_ids if not bool(id_validation.match(i))]
>>> invalid_ids
['11', '34']
xml.etree.ElementTree解析器代码:
>>> import xml.etree.ElementTree as PARSER
>>> root = PARSER.fromstring(content)
>>> all_ids = [i.attrib["id"] for i in root.getiterator() if "id" in i.attrib]
>>> all_ids
['11', '34', 'div2']
>>> id_validation = re.compile("[A-Za-z][\-A-Za-z0-9_:\.]*$")
>>> [i for i in all_ids if not bool(id_validation.match(i))]
['11', '34']
>>>
它也是lxml
的一行,但由于某种原因退出代码 NOT 使用lxml
lib。
>>> from lxml import etree
>>> root = etree.fromstring(content)
>>> root.xpath("//*/@id")
['11', '34', 'div2']
输入内容包含100000个标记,因此对于性能来说,这是最佳处理过程?
时间结果:
对于大内容:
时间RE: - 0.00285315513611 时间根: - 0.0108540058136
对于小内容:
时间RE: - 0.000186920166016 时间根: - 4.00543212891e-05