如何获得正则表达式以将非 ASCII 字符识别为字母



>我正在从瑞典语网页中提取信息。此页面使用如下字符:öäå。

我的问题是,当我打印信息时,öäå 消失了。

我正在使用美丽的汤提取信息。我认为问题是我在提取的字符串上做了一堆正则表达式,例如 location = re.sub(r'([^w])+', '', location)删除除字母以外的所有内容。在此之前,我猜 Beautiful Soup 对字符串进行了编码,以便 öäå 变成类似于/x02/,一个十六进制值。

因此,如果我是对的,那么正则表达式正在删除 öäå,对,我的意思是十六进制字符唯一应该留下的是正则表达式之后的 x,但我的页面上没有 x 而不是 öäå,所以这个小理论可能不正确?无论如何,如果是对还是错,你如何解决这个问题?当我稍后将提取的信息打印到我的网页时,我在谷歌应用程序引擎中使用self.response.out.write()(不知道这是否有助于解决问题)

编辑:瑞典网站上的编码是utf-8

,我网站上的编码也是utf-8。编辑2:您可以使用ISO-8859-10用于瑞典语,但根据谷歌浏览器,此特定站点的编码为Unicode(utf-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 öäå

如果您可以在每个步骤之前和之后转储字符串,这将有所帮助。

首先检查您的re.UNICODE值,请参阅此

最新更新