【问题标题】:How do I get a regular expression to recognize non-ASCII characters as letters?如何获得正则表达式以将非 ASCII 字符识别为字母?
【发布时间】:2012-04-27 06:00:28
【问题描述】:

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

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

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

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

编辑:瑞典网站上的编码是 utf-8,我网站上的编码也是 utf-8。 EDIT2:您可以将 ISO-8859-10 用于瑞典语,但根据 google chrome,此特定站点上的编码是 Unicode(utf-8)

【问题讨论】:

  • 我认为使用BeautifulSoup 的全部意义在于不使用正则表达式。
  • 这可能是一个编码问题(UTF-8 与 ISO-8859-x,x 是用于瑞典语的任何代码页),但如果没有关于所使用编码的更多详细信息,就很难判断。跨度>
  • @JimGarrison 这次不行。这基本上是@jsbueno 的想法——你需要在unicode 中工作,而不是在编码文本上工作。

标签: python regex utf-8 character-encoding ascii


【解决方案1】:

始终以 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 öäå

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-19
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2011-01-08
      • 2012-11-21
      • 1970-01-01
      相关资源
      最近更新 更多