通过正则表达式或xml.etree.ElementTree验证ID值

时间:2015-08-04 14:57:59

标签: python regex xml

问题陈述:

我必须验证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

0 个答案:

没有答案