如果字符串由十六进制字符组成,则返回布尔值

时间:2013-02-24 23:41:26

标签: python escaping hex

我想知道一个字符串是否使用转义字符来表示十六进制字符。与string.isalnum()具有相同风格的东西:

"\x01".ishex()

返回True

"^".ishex()

返回False

这样的功能是否存在?

如果没有,如果它只包含转义字符,是否会返回True

3 个答案:

答案 0 :(得分:2)

"\x01"实际上不包含转义字符。它只是一个字符串,其中第一个字符是值为1的字节。这是因为 - 至少在python 3之前 - python使用字符串来表示字节数组。

在REPL中尝试:

>>> "\x30" == "0"
True
>>> 

这是因为字符0表示为值为30的字节。

现在,如果你真的想要这样做。您可以使用trevor的hack,或者您可以检查字符串是否有任何不可打印的字符,最终表示为十六进制序列。

import string

def is_hex(a):
    printable = set(string.printable) - set("\x0b\x0c")
    return any(c not in printable for c in a)

用法:

>>> is_hex("\x01")
True
>>> is_hex("^")
False
>>> 

答案 1 :(得分:1)

ASCII将“printable characters”定义为0x20到0x7E之间的那些,因此您只需检查字符的代码点。

def is_printable(c):
  return ord(c) >= 0x20 and ord(c) <= 0x7E

你也可以检查代表的长度,虽然它是一种黑客攻击:

def is_hex(s):
  return len(repr(s)) > len(s) + 2

>>> is_hex("\x01")
True
>>> is_hex("^")
False

答案 2 :(得分:0)

没有自动执行此操作的功能。十六进制编码(使用任何语言)使用一组有限的ASCII代码集字符进行“编码”,以表示不同范围内的某些其他字符。十六进制可以用多种方式用字符串表示(“OA”可以解释为十六进制或基于十六进制的数值的一些转义格式)。是的,一个函数可以基于这些标准形式中的一些来编写,但它不是100%可靠的,因为它可以返回的最好的是所说的String(它实际上只是一个字符数组)绝对不是或者'可能是'hex。