Python正则表达式提取引号之间的内容
title = str(Soup.find('td', {'id': 'bxgy_x_img'}))
title_re = re.compile('alt="(.*)"')
title_pat = re.findall(title_re, title)
不知道为什么这个代码没有直接获取到标题,我该怎么做才能让它获取到标题呢?
下面是这个代码运行的HTML内容:
<td id="bxgy_x_img">
<alt="Title" id="bxgy_img_a" height="75" border="0" />
</td>
4 个回答
1
我觉得你真正想要的应该是这样的:
title_re = re.compile('alt="([^"]*)"')
这里的 [^"]
是指“除了双引号以外的任何字符”。我觉得它并不完全符合HTML的有效字符(特别是换行符),但应该能满足你的需求。另外,如果你想获取实际想要的值,还需要处理HTML实体,比如 "
。
2
这个问题是因为*
这个符号是贪婪的,也就是说它会一直匹配到border="0"
后面的那个双引号"
为止。你可以试着把匹配的规则限制为只匹配字母和数字,比如用[A-Za-z0-9]+
。
0
试试这个:
title_re = re.compile('alt="(?P<title>[A-z]*)"')