Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取正则表达式以将非ASCII字符识别为字母?_Python_Regex_Utf 8_Character Encoding_Ascii - Fatal编程技术网

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
而不是编码文本。