我有这个奇怪的字符串:
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}}
但当然我不想明确列出字符类中的所有字符(本例中只列出了一些字符)。
答案 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)