如何在 Python 中检测非 ASCII 字符?

she*_*sky 2 python string ascii python-2.7

我正在使用 Python 2.7 解析多个 XML 文件,有一些字符串,例如:string ="[2,3,13,37–41,43,44,46]". 我将它们拆分以获得所有元素的列表,然后我必须检测带有“-”的元素,例如“37-41”,但事实证明这不是常规破折号,它是一个非 ASCII 字符:

elements = [u'2', u'3', u'13', u'37\u201341', u'43', u'44', u'46']
Run Code Online (Sandbox Code Playgroud)

所以我需要类似的东西

for e in elements:
  if "–" in e:
      # do something about it
Run Code Online (Sandbox Code Playgroud)

如果在这个 if 表达式中使用那个非 ASCII 字符,那么我会得到一个错误:"SyntaxError: Non-ASCII character '\xe2' in file...".

我试图if用这个 re 方法替换表达式:

re.search('\xe2', e)
Run Code Online (Sandbox Code Playgroud)

但现在不是这样了。所以我正在寻找一种方法来将非 ASCII 字符转换为常规 ASCII“-”或直接在搜索表达式中使用 ASCII 数字。

oko*_*kut 7

您可以检查字符值是否在 0 - 127 之间。

for c in someString:
    if 0 <= ord(c) <= 127:
        # this is a ascii character.
    else:
        # this is a non-ascii character. Do something.
Run Code Online (Sandbox Code Playgroud)


bil*_*p22 2

# -*- coding: utf-8 -*-

import re

elements = [u'2', u'3', u'13', u'37\u201341', u'43', u'44', u'46']

for e in elements:
    if (re.sub('[ -~]', '', e)) != "":
        #do something here
        print "-"
Run Code Online (Sandbox Code Playgroud)

re.sub('[ -~]', '', e)将删除中的所有有效 ASCII 字符e(具体来说,将所有有效 ASCII 字符替换为“”),仅保留 e 的非 ASCII 字符。

希望这有帮助

  • 我认为这段代码实际上相当晦涩 - 真的有人能立即看到 `if (re.sub('[ -~]', '', e)) != ""` 的作用吗? (2认同)