2012-01-13 87 views
-2
title = str(Soup.find('td', {'id': 'bxgy_x_img'})) 
title_re = re.compile('alt="(.*)"') 
title_pat = re.findall(title_re, title) 

由于某种原因,这不只是抓标题,我如何让它抓标题?python正则表达式提取之间的引号

这是正在运行的HTML如下:

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

你在做什么? – kindall 2012-01-13 18:34:55

+0

您使用的是BeautifulSoup吗?如果这样的属性可用,就像它们是字典的键一样,例如td ['alt'] – Peter 2012-01-13 18:36:05

+1

对于HTML,['alt'](http://en.wikipedia.org/wiki/Alt_attribute)元素看起来很不寻常。如果它会在'img'前面,这会给你一个答案:'soup.find('td',{'id':'bxgy_x_img'})。findChild('img')['alt']',这将简单地打印*标题*。 – miku 2012-01-13 18:37:24

回答

0

试试这个:

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

'[A-Z]'不仅仅匹配'[A-Za-z]',所以我不确定这是不是你真正想要做的。 – CanSpice 2012-01-13 18:31:41

+0

alt =“标题”,其中标题可以是任何内容。我只是试图提取引号与alt = – user1148275 2012-01-13 18:33:57

+0

之间的内容。使用'[^“] *'除了*引号之外都匹配任何内容*在这里更有意义 – 2012-01-14 13:15:09

2

的问题是,*是贪婪的,这意味着它会一直匹配到'''在border="0"之后,试着用[A-Za-z0-9]+来限制字母和数字

+0

”“里面可以包含字母和数字 – user1148275 2012-01-13 18:35:13

+1

或者让'*'非贪婪:用'*?'代替。 – kindall 2012-01-13 18:35:36

1

HTML看起来坏了当BeautifulSou p解析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> 
1

我想你真正需要的是更多的东西一样:

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

[^"]意味着“什么,但一个双引用字符“。它不严格符合HTML有效字符,我不认为(具体换行符),但它应该适用于您的目的。此外,您需要解析HTML实体 - 例如&quot; - 如果你想捕获实际的预期价值。