匹配除了字符之外的任何内容,除非后跟其他字符

时间:2013-12-23 22:53:35

标签: regex regex-lookarounds

我有这个奇怪的字符串:

firstName:Paul Henry,retired:true,message:A, B & more,title:mr

需要拆分为<key>:<value>对。不幸的是,键/值对由,分隔,,本身可以是值的一部分。因此,:处的简单字符串拆分不会产生正确的结果。

键只包含单词字符,值可以包含\w*:match-anything-but-comma-unless-comma-is-followed-by-space

我需要(我认为)就像

\w*:[\w ?!&%,]*(?![^,])

什么样的作品

{{1}}

但当然我不想明确列出字符类中的所有字符(本例中只列出了一些字符)。

2 个答案:

答案 0 :(得分:3)

如果要分割逗号,除非逗号后跟空格,为什么不只是:

,(?=\S)

不确定您使用的是哪种语言,但在C#中,该行可能如下所示:

splitArray = Regex.Split(subjectString, @",(?=\S)");

答案 1 :(得分:0)

你正在尝试使用一些简单(易于理解)的简单代码做一些复杂的正则表达式。那通常是个错误。只需写一点代码。

在您的情况下,您想要在逗号上拆分输入。如果你得到一个不包含冒号的块,你想把它当作前一个块的一部分。所以写下来吧。例如,在Python中,我会这样做:

chunks = input.split(',')
associations = []
for chunk in chunks:
    if ':' in chunk:
        associations.append(chunk)
    else:
        associations[-1] += ',' + chunk

map = dict(association.split(':') for association in associations)