2012-04-15 29 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

相关问题