0

我正在尝试制作一个捕获以下内容的正则表达式: - XX 或 XX:XX,最多 6 次重复(XX:XX:XX:XX:XX:XX),其中 X 是十六进制数。

换句话说,我试图捕获范围从 1 到 6 个字节的 MAC 地址。

regex = re.compile("^([0-9a-fA-F]{2})(?:(?:\:([0-9a-fA-F]{2})){0,5})$")

问题是,如果我输入例如“11:22:33”,它只会捕获第一个匹配项和最后一个匹配项,从而导致 ["11", "22"]。

问题:有什么方法可以让 {0,5} 字符让我捕捉到所有重复,而不是最后一个?谢谢!

4

1 回答 1

3

不是在 Python 中,不是。但是您可以先使用正则表达式检查正确的格式,然后简单地将字符串拆分为:

result = s.split(':')

另请注意,您应该始终将正则表达式编写为原始字符串(否则您会遇到转义问题)。而你的外部非捕获组什么都不做。


从技术上讲,有一种方法可以只使用正则表达式,但正则表达式非常可怕:

r"^([0-9a-fA-F]{2})(?:([0-9a-fA-F]{2}))?(?:([0-9a-fA-F]{2}))?(?:([0-9a-fA-F]{2}))?(?:([0-9a-fA-F]{2}))?(?:([0-9a-fA-F]{2}))?$"

但是在这里你总是会得到六个捕获,只是有些可能是空的。

于 2012-12-15T20:38:27.010 回答