3

一直在努力,试图为自己弄清楚。基本上我正在接受用户输入,它可以有一个像这样的关键字/值结构:
Blah abc:def lah:123!dfj blah:22:34
最终应该是
('abc', 'def', 'lah':'123!dfj', 'blah':'22:34')

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

4

1 回答 1

3

您不能期望从正则表达式中得到超过一对,因为现在一组括号可以返回多个匹配项。即使你做了类似的事情(([^:]+):([^ ]+) ?)*(这将匹配你的字符串),里面的括号集也只会返回一个匹配项(最后一个)。

如果你想获得更多的配对,你不能通过改变正则表达式来做到这一点,你可以通过一个函数多次应用你的正则表达式来查找所有匹配项,就像scan在 Ruby 中一样。

于 2012-10-11T01:25:30.600 回答