Python “的正则表达式”;a:b";

Python “的正则表达式”;a:b";,python,regex,Python,Regex,我一直在做这件事,试着自己去弄清楚。基本上我接受的是用户输入,可以有这样的关键字/值结构: Blah abc:def lah:123!dfj布拉赫:22:34 最后应该是 ('abc','def','lah':'123!dfj','blah':'22:34') 目前我有(.[^:]+):(.[^]+),但这只是第一个值。我在这里遗漏了一些明显的东西吗?您不能期望从正则表达式中获得多于一对的结果,因为现在有一种方法可以让一组括号返回多个匹配项。即使您执行类似于([^:]+):([^]+)?)*(将

我一直在做这件事,试着自己去弄清楚。基本上我接受的是用户输入,可以有这样的关键字/值结构:
Blah abc:def lah:123!dfj布拉赫:22:34

最后应该是
('abc','def','lah':'123!dfj','blah':'22:34')


目前我有
(.[^:]+):(.[^]+)
,但这只是第一个值。我在这里遗漏了一些明显的东西吗?

您不能期望从正则表达式中获得多于一对的结果,因为现在有一种方法可以让一组括号返回多个匹配项。即使您执行类似于
([^:]+):([^]+)?)*
(将匹配您的字符串)的操作,内部括号集也只会返回一个匹配项(最后一个)


如果您想获得更多对,您不需要更改正则表达式,而需要使用一个函数多次应用正则表达式来查找所有匹配项,如Ruby中的
scan

删除前导点。请确保您设置了“g”标志,因此它是全局匹配,否则,正则表达式函数将在第一次匹配时停止。您使用的是什么编程语言?从我下面的回答中可以看出,这对回答这个问题非常重要。我一直在使用pythons re.findall()函数。+1:很好。在PHP这个无法无天的地方,类似的函数应该是preg_match_all()。