27

我正在使用正则表达式验证字符串是否为十六进制。

我使用的表达式是^[A-Fa-f0-9]$. 当我使用它时,该字符串AABB10被识别为有效的十六进制,但该字符串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]+$这样您就可以匹配具有常见0x格式的字符串,例如0x1A2B3C4D

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 回答
0

如果要处理十六进制转储,例如,

0x01 0x02 0x03 0xff 0xFF

您可以使用拆分字符串str.Text.Split(' ');来获取列表,然后您可以使用以下模式迭代列表

^(0[x]){1}[a-fA-F0-9]{2}$
于 2022-01-19T11:08:02.590 回答