Python:RE仅捕获第一个和最后一个匹配

时间:2012-12-15 20:35:32

标签: regex python-2.7

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

换句话说,我正在尝试捕获的MAC地址范围为1到6个字节。

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

问题在于,如果我输入例如“11:22:33”,它只会捕获第一个匹配和最后一个匹配,从而产生[“11”,“22”]。

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

1 个答案:

答案 0 :(得分: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}))?$"

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