Python 正则表达式a:b c d a:b

Python 正则表达式a:b c d a:b,python,regex,Python,Regex,我现在有一个regex([^:]+):([^]+)?“,当给它一个像这样的字符串时,它是一个正确的:test msg:abc bool:y返回[('correct','test'),('msg','',('bool','y')](使用pythonsre.findall) 实际上,我希望它返回类似于[('correct','test'),('msg','abc'),('bool','y')]。如何强制正则表达式查看第二个块的内部,并查看其中是否有一个:?您可以在第二部分使用,例如 '([^ :]+

我现在有一个regex
([^:]+):([^]+)?“
,当给它一个像
这样的字符串时,它是一个正确的:test msg:abc bool:y
返回
[('correct','test'),('msg','',('bool','y')]
(使用pythons
re.findall

实际上,我希望它返回类似于
[('correct','test'),('msg','abc'),('bool','y')]
。如何强制正则表达式查看第二个块的内部,并查看其中是否有一个

您可以在第二部分使用,例如

'([^ :]+): *(.+?)?(?:(?= [^ ]+:)|$)'
你可以在第二部分使用a,例如

'([^ :]+): *(.+?)?(?:(?= [^ ]+:)|$)'

为什么
[('correct','test),('msg','abc'),('bool','y')]
而不是
[('correct','test'),('msg','a'),('bcbool','y')]
?也就是说,正则表达式如何知道你想要的是一个而不是另一个呢?听起来你需要做一个消极的前瞻,以确保你正在使用的单词不属于第一位。为什么
[('correct','test),('msg','abc'),('bool','y')]
而不是
[('correct','test',('msg','a'),('bcbool','y')]
?也就是说,正则表达式如何知道你想要一个而不是另一个呢?听起来你需要做一个消极的前瞻,以确保你正在消费的单词不属于第一位。