我在分析一个供应商发来的错误信息。
它看起来像这样
LabelOne: Value 1 LabelTwo: Value 2 : LabelThree: Value 3
结果应该是
[{"LabelOne", "Value 1"}, {"LabelTwo", "Value 2"}, {}, { "LabelThree", "Value 3"} ]
注意空匹配是因为空乱码:在Label2之后,这很好。
这个正则表达式
(\w+):\s+([^:]+ )
但它跳过了最后一个值的3(值而不是值3)
但如果值包含时间戳22:00:36,则会中断,我希望它匹配到下一个标签。有什么想法吗?
1条答案
按热度按时间dgiusagp1#
在你的模式中,你使用了一个否定字符类
[^:]+
,它不能像22:00:36
那样交叉匹配冒号。你可以对下一个空格字符使用Assert,后面跟着一个或多个单词字符和一个冒号:
(\w+)
捕获组1中的1+个单词字符:
按字面匹配\s+
匹配1+空格字符(.*?)
在group 2中捕获尽可能少的字符(非贪婪)(?=\s+\w+:|$)
正向前看,Assert1+空格字符,后跟1+单词字符和右边的冒号,或者Assert字符串的结尾Regex demo
如果您希望至少匹配第2组中的一个单词char,则可以使用
(\w.*?)
,而不仅仅是.*?
另一个选项可以是,例如,将冒号以外的非空白字符与
([^\s:].*?)
匹配