Python 如何获取正则表达式以将非ASCII字符识别为字母?
我正在用瑞典语从网页中提取信息。此页面使用的字符如下:öäå 我的问题是,当我打印信息时,这些信息就消失了 我用漂亮的汤提取信息。我认为问题在于我对提取的字符串执行了一系列正则表达式,例如Python 如何获取正则表达式以将非ASCII字符识别为字母?,python,regex,utf-8,character-encoding,ascii,Python,Regex,Utf 8,Character Encoding,Ascii,我正在用瑞典语从网页中提取信息。此页面使用的字符如下:öäå 我的问题是,当我打印信息时,这些信息就消失了 我用漂亮的汤提取信息。我认为问题在于我对提取的字符串执行了一系列正则表达式,例如location=re.sub(r'([^\w])+,'',location),以删除除字母以外的所有内容。在此之前,我猜Beautiful Soup对字符串进行了编码,使得öäå变成了类似/x02/,一个十六进制值 如果我是正确的,那么正则表达式正在删除öäå,对吧,我的意思是十六进制字符的左边唯一应该是正则
location=re.sub(r'([^\w])+,'',location)
,以删除除字母以外的所有内容。在此之前,我猜Beautiful Soup对字符串进行了编码,使得öäå变成了类似/x02/,一个十六进制值
如果我是正确的,那么正则表达式正在删除öäå,对吧,我的意思是十六进制字符的左边唯一应该是正则表达式后面的x,但是在我的页面上没有x而不是öäå,所以这个小理论可能不正确?不管怎样,如果是对的还是错的,你怎么解决这个问题?当我稍后将提取的信息打印到我的网页时,我使用google app engine中的self.response.out.write()(不知道这是否有助于解决问题)
编辑:瑞典网站上的编码是utf-8,而我的网站上的编码也是utf-8。
EDIT2:您可以使用ISO-8859-10来表示瑞典语,但根据google chrome,此特定站点上的编码是Unicode(utf-8)始终使用Unicode,并且仅在必要时转换为编码表示 对于这种特殊情况,还需要使用标志,以便
\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
的值,请参见我认为使用BeautifulSoup
的全部目的不是使用正则表达式。请仔细阅读,这可能是一个编码问题(UTF-8与ISO-8859-x,x是瑞典语使用的任何代码页)但是如果没有更多关于所使用编码的细节,就很难说了。@JimGarrison这次没有。这基本上是@jsbueno所想的——您需要使用unicode
而不是编码文本。