パーサーを作成する前に、解析しようとしているパターンが何であるかを知る必要があります。
しかし、あなたのパターンは次のように見えます: optional 0x
、次に 16 進数、次に optional h
。'0x08h'
少なくともそれは、 と の両方を処理する、私が思いつくことができる最も合理的なものです'080a'
。そう:
def parse_hex(s):
return int(s.lstrip('0x').rstrip('h'), 16)
それで:
numbers = [parse_hex(s) for s in x.split(', ')]
もちろん、実際にプレフィックスを削除する必要0x
はありません。Python はプレフィックスを 16 進文字列の一部として受け入れるため、次のように記述できます。
def parse_hex(s):
return int(s.rstrip('h'), 16)
ただし、より明確にすると、意図がより明確になると思います。
あなたの編集から:
どの (正気の) 文字列ベースの 16 進数表記が Python をサポートしていて、どれがサポートしていないかを編集します。
のドキュメントを参照してくださいint
。
基数 2、-8、および -16 のリテラルには、コード内の整数リテラルと同様に、オプションで 0b/0B、0o/0O、または 0x/0X をプレフィックスとして付けることができます。
それでおしまい。(パラグラフの残りの部分を読んで、 があることが保証されている0x/0X
場合は、base=16 を明示的に使用する必要はありません。しかし、それはここでは役に立たないため、1 つの文だけで十分です。)数値型と数値リテラルに関するドキュメントでは、「コード内の整数リテラルと同様に」正確に詳しく説明しています。唯一驚くべきことは、負の数はリテラルではなく、複素数はリテラルではなく (ただし、純粋な虚数はそうです)、非 ASCII 数字を使用できますが、ドキュメントではその方法が説明されていないことです。