2012-04-15 31 views
4

我從瑞典語的網頁中提取信息。此頁面使用的字符如下:öäå。如何獲得正則表達式來將非ASCII字符識別爲字母?

我的問題是,當我打印信息時,ääå已經消失。

我使用美麗的湯提取信息。我認爲問題在於我在我提取的字符串上做了一堆正則表達式,例如location = re.sub(r'([^\w])+', '', location)刪除除字母以外的所有內容。在此之前,我想美麗的湯編碼的字符串,使ääå成爲像/ x02 /,一個十六進制值。

所以,如果我是正確的,那麼正則表達式正在刪除öäå,對,我的意思是應該留在十六進制字符的唯一東西是x之後的正則表達式,但沒有x而不是öäå對我頁面,所以這個小理論可能不正確?無論如何,如果它是對還是錯,你如何解決這個問題?當我稍後將提取的信息打印到我的網頁時,我在google應用引擎中使用了self.response.out.write()(不知道這是否有助於解決問題)

編輯:瑞典網站上的編碼是utf-8,我網站上的編碼也是utf-8。 EDIT2:您可以使用ISO-8859-10瑞典,但據谷歌Chrome編碼爲Unicode在這個特定的網站(UTF-8)

+0

我想用'BeautifulSoup'是不使用正則表達式的整點。 – RanRag 2012-04-15 19:05:27

+1

請閱讀http://www.joelonsoftware.com/articles/Unicode.html – jsbueno 2012-04-15 19:12:41

+0

這可能是一個編碼問題(UTF-8與ISO-8859-x,其中x代表任何代碼頁用於瑞典語),但沒有有關正在使用的編碼的更多細節很難說清楚。 – 2012-04-15 19:13:06

回答

8

始終以Unicode工作,只有轉換成編碼表示時必要。

對於這種特殊情況下,你還需要使用re.U標誌,以便\w比賽Unicode字母:

#coding: utf-8 

import re 

location = "öäå".decode('utf-8') 
location = re.sub(r'([^\w])+', '', location, flags=re.U) 

print location # prints öäå 
0

這將有助於如果你能在每次步驟之後轉儲字符串。

檢查的re.UNICODE第一個值,看this

相關問題