1

文字列が 16 進文字を表すためにエスケープ文字を使用しているかどうかを知りたいです。と同じスタイルで機能するものstring.isalnum()

"\x01".ishex()

戻り値True

"^".ishex()

戻りますFalse

そのような機能は存在しますか?

Trueそうでない場合、エスケープ文字のみが含まれている場合に返されるものはありますか?

4

3 に答える 3

4

"\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
>>> 
于 2013-02-24T23:59:42.303 に答える
1

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
于 2013-02-24T23:59:28.753 に答える
0

これを自動的に行う機能はありません。16 進エンコード (任意の言語) は、限定された ASCII コード セット文字セットを使用して、別の範囲の他の文字を表す「エンコード」です。16 進数は、文字列でいくつかの方法で表すことができます (「OA」は、16 進数または 16 進数ベースの数値のエスケープ形式として解釈できます)。はい、これらの標準形式のいくつかに基づいて関数を作成できますが、100% 信頼できるわけではありません。返される最善の方法は、前述の文字列 (実際には文字の配列にすぎません) が間違いなく NOT または「可能性がある」ということです。 ' 16 進数。

于 2013-02-25T00:04:16.753 に答える