[英]Regex errors during python loop
我有以下字符串:
Cisco IOS XR Software, Version 5.3.4[Default]
Cisco IOS Software, C3900 Software (C3900-UNIVERSALK9-M), Version 15.4(3)M3, RELEASE SOFTWARE (fc2)
Cisco Nexus Operating System (NX-OS) Software
Cisco IOS XE Software, Version 16.05.01b
Cisco IOS Software [Everest], ISR Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 16.5.1b, RELEASE SOFTWARE (fc1)
當我運行以下正則表達式時,將獲得輸出,但有時會失敗,並顯示以下錯誤:
AttributeError:'NoneType'對象沒有屬性'group'
使用的正則表達式:
re.compile(r'(Cisco(.*)Software)')
re.search(regex_version,session)
使用的正則表達式:
re.compile(r'(Cisco(.*)Software)')
re.search(regex_version,session)
要求的輸出:
IOS XR
IOS
Nexus Operating System
IOS XE
我該如何解決這個問題?
使用re.search將:
掃描字符串以查找正則表達式模式產生匹配項的第一個位置,然后返回相應的匹配對象。
如果嘗試使用訪問不存在的組,則會收到該錯誤消息。 為了防止這種情況,您可以檢查是否存在匹配對象。
為了獲得所需的值,您可以使用一個字符類別為[A-Za-z ]
的單個捕獲組來指定允許匹配的對象,並使用一種溫和的貪婪令牌方法 :
\bCisco\s+((?:(?!\bSoftware\b)[A-Za-z ])*)\s.*?Software
例如
import re
regex = r"\bCisco\s+((?:(?!\bSoftware\b)[A-Za-z ])*)\s.*?Software"
strings = [
"Cisco IOS XR Software, Version 5.3.4[Default]",
"Cisco IOS Software, C3900 Software (C3900-UNIVERSALK9-M), Version 15.4(3)M3, RELEASE SOFTWARE (fc2)",
"Cisco Nexus Operating System (NX-OS) Software",
"""Cisco IOS XE Software, Version 16.05.01b
Cisco IOS Software [Everest], ISR Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 16.5.1b, RELEASE SOFTWARE (fc1)"""
]
for s in strings:
matches = re.search(regex, s)
if matches:
print(matches.group(1))
結果
IOS XR
IOS
Nexus Operating System
IOS XE
我猜想這個表達式可能返回期望的輸出:
\bCisco\s+(.*?)\s+Software\b
import re
regex = r"\bCisco\s+(.*?)\s+Software\b"
test_str = """
Cisco IOS XR Software, Version 5.3.4[Default]
Cisco IOS Software, C3900 Software (C3900-UNIVERSALK9-M), Version 15.4(3)M3, RELEASE SOFTWARE (fc2)
Cisco Nexus Operating System (NX-OS) Software
Cisco IOS XE Software, Version 16.05.01b Cisco IOS Software [Everest], ISR Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 16.5.1b, RELEASE SOFTWARE (fc1)
"""
print(re.findall(regex, test_str))
['IOS XR', 'IOS', 'Nexus Operating System (NX-OS)', 'IOS XE', 'IOS']
在regex101.com右上角的面板上說明了該表達式,如果您希望對其進行探索/簡化/修改,並且在此鏈接中 ,您可以根據需要觀看它與某些示例輸入的匹配方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.