2013-08-21 110 views
1

我試圖在許多HTML頁面中找到一個字符串「USB 2端口」。問題是這些字符串在它們之前有大量的空白空間 - 有時是4個,20個甚至50個空白字符。如何在HTML文檔中查找字符串,忽略空格?

與我的字符串前一個空格字符以下工作:

soup.find(text=' USB 2 ports') 

注意USB之前的空單。

我怎樣才能知道美麗的湯的find()找到我的字符串,而忽略所有前面的空白?

回答

2

你可以定義一個regular expression搜索文本,無論開頭和結尾的空白:

import re 
pattern = re.compile(r'\s*%s\s*' % 'USB 2 ports') 
result = soup.find(text=pattern) 

例如:

>>> soup = BeautifulSoup(""" 
... <html> 
... <body> 
...  <ul> 
...  <li> 
...   USB 2 ports 
...  </li> 
...  <li> 
...   Firewire ports 
...  </li> 
...  <li> 
...   HDMI ports 
...  </li> 
...  </ul> 
... </body> 
... </html> 
... """) 
>>> import re 
>>> pattern = re.compile(r'\s*%s\s*' % 'USB 2 ports') 
>>> soup.find(text=pattern) 
u'\n  USB 2 ports\n  ' 

編輯:我已經改變了上面的代碼明確地將soup.find()的結果賦值給一個變量,希望能夠更清楚地說明發生了什麼。爲了清晰起見,我最初是在示例代碼之後的代碼中對代碼進行了建模,但是現在我懷疑您可能對代碼的實際操作有些困惑。

+0

出於某種原因,這將返回沒有,我用另一個字符串值嘗試過了,我得到了<_sre.SRE_Pattern對象在0x00000000028C2C50>當我試圖試圖打印模式 – Ninja2k

+0

@ Ninja2k我認爲必須有一些其他的問題,你的代碼,然後;它對我來說是完美的(我上面添加的演示是一個來自Python 2.7.3解釋器的直接複製粘貼)。 –

+0

另外:是的,當你打印'pattern'時,你會得到它,因爲它*是一個正則表達式模式。 'soup.find(text = pattern)'的返回值就是結果。 –

相關問題