我正在尝试对包含MAC地址的文本文件运行正则表达式。它匹配所有四行,但只计算2。我是python新手,出于某种原因,我无法理解这一点。代码如下:
regmac = re.compile("^(([a-fA-F0-9]{2}-){5}[a-fA-F0-9]{2}|([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}|([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})?$")
regmac1 = "^(([a-fA-F0-9]{2}-){5}[a-fA-F0-9]{2}|([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}|([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})?$"
with open(file, 'r') as i:
for line in i.read().split('\n'):
#matches = re.findall(regmac1, line)
matches = regmac.findall(line)
print(matches.count(regmac1)))
macmatch = len(matches)
macmatch += 1
print(macmatch)
这将返回以下内容:
C:/Users/jonat/desktop/mactest1.txt
['AE:30:5B:AA:65:7B', '9C:30:5B:BB:66:7B', 'AE:30:5B:CC:67:7B', '9C:30:5B:DD:68:7B']
0
0
0
0
2
我已经检查了论坛等,这是我结束了,任何在正确的方向推动将不胜感激,谢谢
每次转到新行时,都会重置
macmatch
。在for循环外部初始化macmatch
,然后它就会工作。你的正则表达式中也有很多捕获组,这可能会影响你的比赛计数。可以在括号内使用?:
来防止创建捕获组,如下所示:如果您没有尝试验证MAC地址的准确性,而是只查找看起来像MAC地址的字符串(因此
9C:30:5B:BB-66-7B
也是可以接受的),您可以显著缩短正则表达式:然后您可以运行:
相关问题 更多 >
编程相关推荐