Python正则表达式提取引号之间的内容

-2 投票
4 回答
527 浏览
提问于 2025-04-17 10:11
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实体,比如 &quot;

2

这个问题是因为*这个符号是贪婪的,也就是说它会一直匹配到border="0"后面的那个双引号"为止。你可以试着把匹配的规则限制为只匹配字母和数字,比如用[A-Za-z0-9]+

0

试试这个:

title_re = re.compile('alt="(?P<title>[A-z]*)"')

撰写回答