gpt4 book ai didi

python - 如何使用 * 或捕获字符串?用 python 正则表达式中的组

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:24 24 4
gpt4 key购买 nike

下面有 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) 
>>>

最佳答案

我对这个问题的解释是,OP 想要一个匹配两个字符串的正则表达式,并返回 .group(1) 中的数字(如果它存在)(就像在 str1 中一样)。我认为问题在于他/她无法同时捕获 str1 中的“6”并匹配 str2。

我通过一些快速的试验和错误得到了这个:

>>> str1='''4 48 48-port and 6 QSFP 10GigE Linecard 7548S-LC''' 
>>> str2='''4 48 48-port 10GigE Linecard 7548S-LC'''
>>> re.search(r'^4\s+48\s+.*(?:(\d+)\s+QSFP)|.*-LC', str1, re.I|re.M).group(1)
'6'
>>> re.search(r'^4\s+48\s+.*(?:(\d+)\s+QSFP)|.*-LC', str2, re.I|re.M).group(1)
>>> # no error returned, implying a match was found.

区别在于我用.*“或”非捕获括号

不幸的是,这使得正则表达式更加难以理解,但也许它对你有用。

(为完整性而编辑)

关于python - 如何使用 * 或捕获字符串?用 python 正则表达式中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10159537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com