首页 文章

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

提问于
浏览
0

我正在使用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']

所以我需要类似的东西

for e in elements:
  if "–" in e:
      # do something about it

如果在此if表达式中使用非ASCII字符,则会出现错误: "SyntaxError: Non-ASCII character '\xe2' in file..." .

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

re.search('\xe2', e)

但事实并非如此 . 所以我正在寻找一种方法来将非ASCII字符转换为常规ASCII“ - ”或直接在搜索表达式中使用ASCII数字 .

5 回答

  • 0
    # -*- 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 "-"
    

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

    希望这有帮助

  • 3

    您可以检查字符值是否介于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.
    
  • 0

    尝试一下:

    >>> import re
    >>> non_decimal = re.compile(r'[^\d.]+')
    >>>
    >>> string ="[2,3,13,37–41,43,44,46]"
    >>> new_str = string.replace("[","")
    >>> new_str = new_str.replace("]","")
    >>> lst = new_str.split(",")
    >>> for element in lst:
        if element.isdigit():
            print element
        else:
            toexpand = non_decimal.sub('f', str(element))
            toexpand = toexpand.split("f")
            for i in range(int(toexpand[0]),int(toexpand[1])+1,1):
                print i
    
    
    2
    3
    13
    37
    38
    39
    40
    41
    43
    44
    46
    >>>
    
  • 1

    您必须在Python程序中声明您的编码,例如:

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

    通常Python告诉你这个问题:

    SyntaxError:第3行文件./fail.py中的非ASCII字符'\ xe2',但未声明编码;有关详细信息,请参阅http://www.python.org/peps/pep-0263.html

    添加encoying后,您的代码应该可以正常工作 .

  • 1

    这可能无法解答您的整个问题 . 方式太简单而且不灵活 . 每当我遇到这个错误时,我就会这样做 .

    我经常打开一个 interactive python shell 并输入:

    print [ln for ln in open("filename.py", "rb").readlines() if "\xe2" in ln]

    这为你提供了\ ex2的行 . 然后尝试在编辑器中找到它 . 并尝试删除该字符 .

相关问题