我在下面有 str1 和 str2,我只想使用一个匹配两者的正则表达式。在 str1 的情况下,我还希望能够捕获 QSFP 端口的数量
>>> str1='''4 48 48-port and 6 QSFP 10GigE Linecard 7548S-LC'''
>>> str2='''4 48 48-port 10GigE Linecard 7548S-LC'''
>>>
我希望能够捕获数字“4”、“48”、“6”(如果存在)和“7548”。但我无法使用“?”捕获“6” 元字符。
当我不使用元字符时,捕获适用于 str1,但我可以使用这个正则表达式,因为它不适用于 str2:
>>> re.search(r'^(\d+)\s+(\d+)\s+.*(?:(\d+)\s+QSFP).*\s+(\d+)S-LC', str1, re.I|re.M).group(3)
'6'
>>>
即使我使用“+”表示一次出现,它也可以工作,但同样,这对 str2 不起作用:
>>> re.search(r'^(\d+)\s+(\d+)\s+.*(?:(\d+)\s+QSFP)+.*\s+(\d+)S-LC', str1, re.I|re.M).group(3)
'6'
>>>
当我使用“?” 为了匹配 0 或 1 次出现,即使 str1 也捕获失败:
>>> re.search(r'^(\d+)\s+(\d+)\s+.*(?:(\d+)\s+QSFP)?.*\s+(\d+)S-LC', str1, re.I|re.M).group(3)
>>>