2012-01-13 84 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; - 如果你想捕獲實際的預期價值。