用于标记字符串的正则表达式

regular expression to tokenize string

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

'key1:value1,key2:value2,key3:value3'

它也可以是这样的:

'key1:value1,key3:value3'

'key1:value1'

'' (it could be empty)

在这一点上,我有这个标记化逻辑分解这个字符串(有点冗长)。是否有一个正则表达式可以帮助我提取给定键(或 return null)给定上述任何字符串的值?

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

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

我猜你只需要找到 key/value 对:

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

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

Demo.

这将匹配 </code> 中的键和 <code> 中的值。够简单了。

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

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

Demo.

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

使用RubyString#Split

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

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