我正在尝试制作一个捕获以下内容的正则表达式: - 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}字符让我捕捉所有重复的方法,而不是最后一个? 谢谢!
答案 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次捕获,只是有些可能是空的。