регулярное выражение Python, извлекаемое между кавычками - PullRequest
0 голосов
/ 13 января 2012
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 ]

2 голосов
/ 13 января 2012

Проблема в том, что * является жадным, что означает, что он будет полностью соответствовать символу "" после border="0". Попробуйте ограничить шаблон только буквами и цифрами, используя [A-Za-z0-9]+.

1 голос
/ 13 января 2012

Я думаю, что вы действительно ищете что-то вроде:

title_re = re.compile('alt="([^"]*)"')

Где [^"] означает «что угодно, кроме символа двойной кавычки».Я не думаю, что он строго соответствует действительным символам HTML (особенно переводы строк), но он должен работать в ваших целях.Кроме того, вам нужно проанализировать HTML-сущности - например, &quot; - если вы хотите зафиксировать фактическое предполагаемое значение.

0 голосов
/ 13 января 2012

HTML, похоже, не работает. Когда BeautifulSoup анализирует content, он интерпретирует только <alt="Title" id="bxgy_img_a" height="75" border="0" /> как пустой тег <alt></alt>:

import BeautifulSoup

content = '''\
<td id="bxgy_x_img">

<alt="Title" id="bxgy_img_a" height="75" border="0" />

</td>
'''

soup = BeautifulSoup.BeautifulSoup(content)
title = str(soup.find('td', {'id': 'bxgy_x_img'}))
print(title)

# <td id="bxgy_x_img">
# <alt>
# </alt></td>
0 голосов
/ 13 января 2012

Попробуйте это:

title_re = re.compile('alt="(?P<title>[A-z]*)"')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...