从html字符串中删除python正则表达式中不需要的模式

从html字符串中删除python正则表达式中不需要的模式,python,regex,Python,Regex,我必须从html解析自定义vin号 我也得到了一些错误的匹配号码 ..... <meta name="google-site-verification" content="l4du7Ao9MH6TM2nJ5L54qqWoXWcuOkdeqhXCADgKErc" /> <meta name="msvalidate.01" content="FAD32C2469C51767894EB50068D37244" /> ..... <div class="

我必须从html解析自定义vin号

我也得到了一些错误的匹配号码

 .....
 <meta name="google-site-verification" content="l4du7Ao9MH6TM2nJ5L54qqWoXWcuOkdeqhXCADgKErc" />
 <meta name="msvalidate.01" content="FAD32C2469C51767894EB50068D37244" />
     .....
  <div class="hproduct auto chevrolet" data-classification="primary" data- vin="3GNDA23D18S647673" data-make="Chevrolet" >

 .....
 </dd></dl><dl class='vin'><dt>VIN:</dt><dd>3GNDA23D18S647673</dd></dl> <span 
 ....... etc....
我得到了所需的结果和不需要的数据 像

FAD32C2469C517678是不需要的


如何在python的正则表达式中消除这种不需要的模式?

您确实应该使用HTML解析器,但要快速修复,请使用regexp
(?请使用解析器:

import lxml.html as lh
doc=lh.fromstring(html)
doc.xpath('.//@vin')
out

["3GNDA23D18S647673"]
编辑: 如果vin始终是一个属性,但您不知道名称,可以尝试:

doc.xpath('.//@*[string-length() = "17"]') # get's attrs with lenght 17
或者使用正则表达式,如果您真的必须:

import re
re.findall('"([A-Z0-9]{17})"',html)

为什么不使用HTML解析器呢?@fge实际上,我的要求是处理不同页面的不确定HTML标记。因此,我使用的是regex,只需使用这个字符串。谢谢你的回复。是的,我使用的是HTML解析器“lxml”仅用于其他数据提取的解析目的。在这里,我想检查这个特定字符串的计数。因此,我使用各种源。因此,您不能使用lxml筛选出您确定无趣的内容(我不使用它,所以我不知道)因此,正则表达式的编写变得更简单?我们可以在lxml中过滤掉,但我们有更多不同的html布局。因此,使用html解析器,我们可以按顺序而不是并行地进行操作。
import lxml.html as lh
doc=lh.fromstring(html)
doc.xpath('.//@vin')
["3GNDA23D18S647673"]
doc.xpath('.//@*[string-length() = "17"]') # get's attrs with lenght 17
import re
re.findall('"([A-Z0-9]{17})"',html)