正则表达式以标记字符串

时间:2015-03-11 22:52:16

标签: java regex serialization

我有一个看起来像这样的序列化对象(不包括引号):

  

'KEY1:值1,KEY2:值2,KEY3:VALUE3'

它也可能如下所示:

  

'KEY1:值1,KEY3:VALUE3'

OR

  

'KEY1:VALUE1'

OR

  

''(可能是空的)

此时我有这个令牌化的逻辑分解这个字符串(这有点冗长)。是否有一个正则表达式可以帮助我在给定任何上述字符串的情况下提取给定键的值(或返回null)?

3 个答案:

答案 0 :(得分:0)

如果您知道确切的边界,则关键字匹配是直截了当的。在这种情况下,您将单个撇号作为字符串边界,将逗号作为分隔符。因此,这是匹配给定键的值的正则表达式(基于您的输入示例):

(?<=key1\:).+?(?=,|'|$) --> finds 3 "value1" matches
(?<=key2\:).+?(?=,|'|$) --> finds 1 "value2" match
(?<=key3\:).+?(?=,|'|$) --> finds 2 "value3" matches
(?<=key4\:).+?(?=,|'|$) --> no match

答案 1 :(得分:0)

我猜你所需要的只是找到键/值对:

您可以使用的最简单的正则表达式是:

([^:,]+):([^:,]+)

Demo

这将匹配$1中的键和$2中的值。很简单。

现在,您可以根据需要引入变体:

(\w+):(.+?)(?=,|$)

Demo

这个确保密钥只包含字母数字字符和下划线,并确保值以逗号结尾或在字符串的末尾。希望你明白这一点。

答案 2 :(得分:0)

使用Ruby String#Split

正则表达式引擎因语言而异,因为你没有用一个标记你的问题,我给你一个简单的Ruby解决方案。以下内容将您的字符串拆分为冒号或逗号:

'key1:value1,key2:value2,key3:value3'.split /:|,/
#=> ["key1", "value1", "key2", "value2", "key3", "value3"]