gpt4 book ai didi

python - 如何在正则表达式python中捕获未知长度的模式?

转载 作者:行者123 更新时间:2023-11-30 22:59:31 25 4
gpt4 key购买 nike

作为学习练习,我喜欢比较两个做同样事情的正则表达式。

在这种情况下,我想从字符串中提取数字序列,如下所示:

CC_nums=[
'2341-3421-5632-0981-009',
'521-9085-3948-2543-89-9'
]

在正则表达式中捕获后的正确结果将是

['2341', '3421', '5632', '0981', '009']
['4521', '9085', '3948', '2543', '89', '9']

我知道这在python中有效:

for number in CC_nums:
print re.findall('(\d+)',number)

但是,为了更深入地理解这一点,我尝试了以下操作:

for number in CC_nums:
print re.findall('\s*(?:(\d+)\D+)+(\d+)\s*', number)

..返回:

[('0981', '009')]
[('89', '9')]

两个问题:

首先,为什么第二个返回元组而不是列表?其次,为什么第二个数字与其他组数字不匹配,例如23413241等?

我知道 findall 将返回非重叠捕获组,所以我试图避免这种情况。由于 (\d+),捕获组不重叠,因此我认为这不会成为问题。

最佳答案

参见Python re.findall behaves weird了解为什么 re.findall 返回一个元组列表。基本上,它返回一个元组,因为您的模式中有多个捕获组。

正则表达式返回最后一个数字子字符串,因为 + 量词应用于 (?:(\d+)\D+) 组,因此,每个当此子模式捕获子字符串时,前一个子字符串将被组缓冲区中的新子字符串替换。

关于python - 如何在正则表达式python中捕获未知长度的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727266/

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