簡體   English   中英

如何計算正則表達式字符串 python 3 中的所有匹配項

[英]How to count all matches from a regex string python 3

我正在嘗試對包含 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

我已經檢查了論壇等,這就是我最終得到的結果,任何朝着正確方向的輕推將不勝感激,謝謝!

每次將 go 設置為新行時,您都在重置macmatch 在 for 循環之外初始化macmatch ,然后它將起作用。 您的正則表達式中還有很多捕獲組,它們可能會影響您的匹配計數。 您可以在括號內使用?:來防止創建捕獲組,如下所示:

^((?:[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})?$

如果您不嘗試驗證 MAC 地址的准確性,而只是尋找看起來像MAC 地址的字符串(因此9C:30:5B:BB-66-7B也是可以接受的),您可以顯着縮短您的正則表達式:

^((?:[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:
    macmatch = 0
    for line in i.readlines():
        matches = regmac.findall(line)
        macmatch += len(matches)
        # OR: macmatch += (1 if matches else 0)

    print(macmatch)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM