【问题标题】:Finding regex, unicode patterns查找正则表达式、Unicode 模式
【发布时间】:2013-03-25 22:16:10
【问题描述】:

我正在尝试抓取存在 unicode 字符的网站。我在一开始就声明了-*- coding: utf-8 -*- 加上我使用了re.UNICODE 标志

pattern = re.compile('(?:{}|{})'.format(regex, regex1), re.UNICODE)

但是,当我打印输出时,我仍然会得到那些奇怪的字符,例如

我该如何解决这个问题?谢谢!

【问题讨论】:

  • 您可能会因为您的字体不支持相应的 Unicode 字符而得到 � 字形。
  • 百分百。
  • 您必须先从网站解码 UTF-8 文本。例如,请参阅this question

标签: python regex unicode python-2.7


【解决方案1】:

仅仅因为页面包含非拉丁字符并不意味着它是用 unicode 编码的(还有,哪种 unicode 编码?utf-8?utf-16?)。

此外,re.UNICODE 可能不会像您认为的那样做。来自文档:

使 `\w、\W、\b、\B、\d、\D、\s` 和 `\S` 依赖于 Unicode 字符属性数据库。

所有这一切意味着这些特定的字符类被更广泛地定义,它对源文本没有影响。

此外,coding definition-*- coding: utf-8 -*- 只是指定您的源文件的编码。

最后,正如其中一个 cmets 所述,� 可能是使用当前字体不支持的字符的结果。反过来,这可能是假设某种编码而文本以不同编码编码的结果。

【讨论】:

  • 谢谢,但我还在苦苦挣扎。我确定是utf-8
【解决方案2】:

这本身可能不是一个“答案”。但您可以尝试使用http://www.debuggex.com 来稍微调试一下您的正则表达式。

【讨论】:

  • 您应该将此作为评论而不是答案。
  • 不知道为什么(可能是因为我的 stackoverflow 声誉不够高?)但我似乎没有选择让 cmets 除了我自己的答案之外的任何事情......不过看起来是对的……
猜你喜欢
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
相关资源
最近更新 更多