27

正規表現を使用して、文字列が16進数であるかどうかを検証しています。

私が使用した式はです^[A-Fa-f0-9]$。これを使用すると、文字列AABB10は有効な16進数として認識されますが、文字列10AABBは無効として認識されます。

どうすれば問題を解決できますか?

4

4 に答える 4

44

ほとんどの場合、が必要+ですregex = '^[a-fA-F0-9]+$'0xただし、文字列の先頭にあるオプションなどを(おそらく)慎重に検討します。これにより、文字列が作成され^(0x|0X)?[a-fA-F0-9]+$'ます。

于 2012-08-09T06:12:33.387 に答える
10

^[A-Fa-f0-9]+$

動作するはずです、+一致1する、またはそれ以上の文字。

Python の使用:

In [1]: import re

In [2]: re.match?
Type:       function
Base Class: <type 'function'>
String Form:<function match at 0x01D9DCF0>
Namespace:  Interactive
File:       python27\lib\re.py
Definition: re.match(pattern, string, flags=0)
Docstring:
Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.

In [3]: re.match(r"^[A-Fa-f0-9]+$", "AABB10")
Out[3]: <_sre.SRE_Match at 0x3734c98>

In [4]: re.match(r"^[A-Fa-f0-9]+$", "10AABB")
Out[4]: <_sre.SRE_Match at 0x3734d08>

理想的には、次のような一般的なフォーマット^(0[xX])?[A-Fa-f0-9]+$の文字列と照合できるようにする必要があるかもしれません0x0x1A2B3C4D

In [5]: re.match(r"^(0[xX])?[A-Fa-f0-9]+$", "0x1A2B3C4D")
Out[5]: <_sre.SRE_Match at 0x373c2e0>
于 2012-08-09T06:07:19.297 に答える
1

'+'を忘れましたか?「^[A-Fa-f0-9]+$」を試してみます

于 2012-08-09T06:11:48.713 に答える