2016-06-22 224 views
-2

我有一个很大的字符串 - html页面。我需要找到闪存驱动器的所有名称,即 ,即我需要在双引号之间获得内容:data-name="USB Flash-drive Leef Fuse 32Gb">。所以我需要一个data-name="">之间的字符串。请不要提及BeautifulSoup,我需要在不使用BeautifulSoup的情况下完成,没有正则表达式就更好,但是也可以接受正则表达式。Python。如何查找匹配子串的所有匹配项?

我试图用这样的:

p = re.compile('(?<=")[^,]+(?=")') 
result = p.match(html_str) 
print(result) 

,但结果是没有。 但在regex101.com它的工作: enter image description here

+0

在HTML上使用DOM解析器来提取属性的值有什么问题? –

+0

@Vasili Syrakis我有一定的任务 - 使用python。 –

+0

fyi bs4 = python;看到这个链接的第一段:https://www.crummy.com/software/BeautifulSoup/bs4/doc/ –

回答

2

PY2:https://docs.python.org/2/library/htmlparser.html

PY3:https://docs.python.org/3/library/html.parser.html


from html.parser import HTMLParser 

class MyHTMLParser(HTMLParser): 
    def handle_starttag(self, tag, attrs): 
     # tag = 'sometag' 
     for attr in attrs: 
      # attr = ('data-name', 'USB Flash-drive Leef Fuse 32Gb') 
      if attr[0] == 'data-name': 
       print(attr[1]) 

parser = MyHTMLParser() 
parser.feed('<sometag data-name="USB Flash-drive Leef Fuse 32Gb">hello world</sometag>') 

输出:

USB Flash-drive Leef Fuse 32Gb 

我添加了一些意见到代码sh你知道解析器返回什么样的数据结构。

从这里开始建造应该很容易。

只要在HTML中提供,它就会解析它。参考文档,并继续尝试。

+0

非常感谢,上帝保佑你。 –

0

如果你想与基本的Python字符串解析这里做它是一种

s="html string" 
start = s.find('data-name="') 
end = s.find('">') 
output = s[start:end] 

这是在我的Python壳发生

>>> s='junk...data-name="USB Flash-drive Leef Fuse 32Gb">...junk' 
>>> start = s.find('data-name="') 
>>> end = s.find('">') 
>>> output = s[start:end] 
>>> output 
'data-name="USB Flash-drive Leef Fuse 32Gb' 

让我知道如果脚本作品,这部分单独使用

+0

不起作用,输出为空 –

+0

您的示例工程,但与我的大html字符串 –

+0

如果你仍然在替代解决方案后,你可以粘贴你的长HTML字符串,我测试 – user3404344