gpt4 book ai didi

python - 正则表达式中([^,]*)和(.*,)的区别?使用Python

转载 作者:行者123 更新时间:2023-11-30 22:20:37 26 4
gpt4 key购买 nike

当我尝试将字符串转换为类似字典的形式时,遇到了这个问题

s = '&a: 12, &b:13, &c:14, &d: 15' # the string I want to convert

在转换之前,我首先尝试找到所有匹配的结果,所以我使用了

dict_form = re.compile(r'(&[a-zA-Z]*:)(.*),')
result = dict_form.findall(s)
print(result) # [('&a:', ' 12, &b:13, &c:14')]

这很出乎意料,而且有点困惑

但是当我尝试另一种方法来匹配字符串时:

dict_form1 = re.compile(r'(&[a-zA-Z]*:)([^,]*)')
result = dict_form1.findall(s)
print(result) # [('&a:', ' 12'), ('&b:', '13'), ('&c:', '14'), ('&d:', ' 15')]

这一次,我得到了一个更好的, key 和项目分别存储在一个元组中。

我所做的唯一区别是 (.) 变为 [^,]

我第一个想到的是查找任何内容,直到它与逗号匹配为止我想的第二个是找到除逗号之外的任何内容

有什么区别?

最佳答案

在第一种情况下:

dict_form = re.compile(r'(&[a-zA-Z]*:)(.*),')

(.*) 运算符是贪婪。这意味着它将匹配直到最后一个逗号的所有内容,这就是为什么您会看到匹配扩展到 &c:14

在第二种情况下,通过排除逗号,您将强制匹配由逗号绑定(bind) - 这就像说“匹配所有内容,直到我们遇到逗号”。这将导致您最初期望的匹配行为。

关于python - 正则表达式中([^,]*)和(.*,)的区别?使用Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48797409/

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