检查字符串是否只包含 ASCII 字符?

新手上路,请多包涵

如何在 Python 中检查字符串是否只包含 ASCII 字符?类似于 Ruby 的 ascii_only?

我希望能够判断从文件中读取的字符串特定数据是否在 ascii 中

原文由 JavaSa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 796
2 个回答

在 Python 3.7 中添加了一些方法来执行您想要的操作:

str , bytes , and bytearray support for the new isascii() method, which can be used to test if a string or bytes contain只有 ASCII 字符。


否则:

 >>> all(ord(char) < 128 for char in 'string')
True
>>> all(ord(char) < 128 for char in 'строка')
False

另一个版本:

 >>> def is_ascii(text):
    if isinstance(text, unicode):
        try:
            text.encode('ascii')
        except UnicodeEncodeError:
            return False
    else:
        try:
            text.decode('ascii')
        except UnicodeDecodeError:
            return False
    return True
...
>>> is_ascii('text')
True
>>> is_ascii(u'text')
True
>>> is_ascii(u'text-строка')
False
>>> is_ascii('text-строка')
False
>>> is_ascii(u'text-строка'.encode('utf-8'))
False

原文由 warvariuc 发布,翻译遵循 CC BY-SA 4.0 许可协议

您还可以选择正则表达式只检查 ascii 字符。 [\x00-\x7F] 可以匹配单个ascii字符:

 >>> OnlyAscii = lambda s: re.match('^[\x00-\x7F]+$', s) != None
>>> OnlyAscii('string')
True
>>> OnlyAscii('Tannh‰user')
False

原文由 Quinn 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题