文字列が 16 進文字を表すためにエスケープ文字を使用しているかどうかを知りたいです。と同じスタイルで機能するものstring.isalnum()
:
"\x01".ishex()
戻り値True
と
"^".ishex()
戻りますFalse
。
そのような機能は存在しますか?
True
そうでない場合、エスケープ文字のみが含まれている場合に返されるものはありますか?
"\x01"
実際にはエスケープ文字は含まれていません。これは、最初の文字が値 1 のバイトである単なる文字列です。これは、少なくとも Python 3 より前では、Python が文字列を使用してバイト配列を表すという事実によるものです。
REPLでこれを試してください:
>>> "\x30" == "0"
True
>>>
これは、文字0
が値 30 のバイトとして表されるためです。
今、あなたが本当にこれをやりたいのなら。トレバーのハックを使用するか、文字列に印刷できない文字が含まれているかどうかを確認して、最終的に16進シーケンスとして表すことができます。
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
>>>
ASCII は「印刷可能な文字」を 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
これを自動的に行う機能はありません。16 進エンコード (任意の言語) は、限定された ASCII コード セット文字セットを使用して、別の範囲の他の文字を表す「エンコード」です。16 進数は、文字列でいくつかの方法で表すことができます (「OA」は、16 進数または 16 進数ベースの数値のエスケープ形式として解釈できます)。はい、これらの標準形式のいくつかに基づいて関数を作成できますが、100% 信頼できるわけではありません。返される最善の方法は、前述の文字列 (実際には文字の配列にすぎません) が間違いなく NOT または「可能性がある」ということです。 ' 16 進数。