【问题标题】:How do I regex search for weird non-ASCII characters in Python?如何在 Python 中正则表达式搜索奇怪的非 ASCII 字符?
【发布时间】:2011-01-03 14:57:03
【问题描述】:

我基本上使用下面的正则表达式来搜索和删除这些字符。

invalid_unicode = re.compile(ur'(Û|²|°|±|É|¹|Í)')

我在ASCII 编码的源代码,每当我尝试运行脚本时,它就会吐出:

语法错误:第 273 行的文件 ./release.py 中的非 ASCII 字符“\xdb”,但未声明编码;详情见http://www.python.org/peps/pep-0263.html

如果我按照给定网站上的说明进行操作,并将utf-8 放在第二行编码上,我的脚本将不会运行。相反,它给了我这个错误:

SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xdb in position 0: unexpected end of data

如何让这个正则表达式在 ASCII 书写的脚本中运行会很棒。

【问题讨论】:

标签: python regex unicode ascii


【解决方案1】:

您需要找出您的编辑器使用的编码,并根据 PEP263 进行设置;或者,使事情更加稳定和可移植(虽然可能不太可读)并在字符串文字中使用转义序列,即使用 u'(\xdb|\xb2|\xb0|\xb1|\xc9|\xb9|\xcd)' 作为 re.compile 调用的参数。

【讨论】:

  • 我不会使用 Unicode 字符的字节表示,因为它确实取决于语言环境。我会作为 Unicode 转义,从而避免任何复杂性。
  • @Paulo,Unicode 编码不一定依赖于语言环境——您可以使用'utf-8' 或其他独立于语言环境的编码。但无论如何,我上面给出的形式是 print repr(thestring) 发出的, 依赖于任何编码,并且不可能导致任何并发症(它与使用 \u00db 相同,所以开,保证产生完全相同的 Unicode 对象,只是更简洁,因为它可以节省你输入不变的00 部分!-)。
【解决方案2】:
\x{c0de}

在正则表达式中将匹配代码点 c0de 处的 Unicode 字符。

Python 使用 PCRE,对吗? (如果没有,可能是\uC0DE...)

【讨论】:

    【解决方案3】:

    在告诉 Python 您的源文件使用 UTF-8 编码之后,您是否确实确保您的编辑器保存文件使用的是 UTF-8 编码?您收到的错误表明您的编辑器可能没有使用 UTF-8。

    你用的是什么文本编辑器?

    【讨论】:

    猜你喜欢
    • 2011-04-02
    • 2018-07-24
    • 2012-11-21
    • 2013-02-19
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2011-01-08
    • 2014-08-15
    相关资源
    最近更新 更多