正则表达式:"a:b"。

3

我一直在尝试自己解决这个问题。基本上,我正在获取用户输入,该输入可以具有关键字/值结构,例如:
Blah abc:def lah:123!dfj blah:22:34
最终应该是
('abc', 'def', 'lah':'123!dfj', 'blah':'22:34')

目前我有(.[^: ]+):(.[^ ]+),但那只能得到第一个值。我错过了什么明显的东西吗?


4
去掉前面的点号。 - Chris Tonkinson
1
确保你设置了 'g' 标志,这样它就是一个全局匹配,否则正则表达式函数会在第一次匹配时停止。 - Kelvin
你使用哪种编程语言?正如下面我的回答所示,这对回答这个问题实际上是很重要的。 - Ken Bloom
我一直在使用Python的re.findall()函数。 - Andrei Zbikowski
1个回答

3
您不能期望从正则表达式中获得多个匹配,因为一组括号没有办法返回多个匹配。即使您执行类似于(([^:]+):([^ ]+) ?)*(将匹配您的字符串)的操作,内部括号组也只会返回一个匹配项(最后一个)。
如果您想获得更多的匹配项,不是通过更改正则表达式来实现,而是通过使用将您的正则表达式应用多次以查找所有匹配项的函数,例如Ruby中的scan函数。

2
+1:好观点。在PHP这个无政府状态的地方,类似的功能应该是 preg_match_all()。 - Chris Tonkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接