apple,city=山东,color=猪皮红 number=100,year=2018 1529074637
怎么匹配这种格式的字符串// 数据样例 myMeasurement,tag1=value1,tag2=value2 fieldKey=fieldValue 1556813561098000000
apple,city=山东,color=猪皮红 number=100,year=2018 1529074637
怎么匹配这种格式的字符串// 数据样例 myMeasurement,tag1=value1,tag2=value2 fieldKey=fieldValue 1556813561098000000
10 回答11.1k 阅读
15 回答8.4k 阅读
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
摘要
如果要匹配这段字段串,大概会是这样一个正则表达式
正则表达式细节
规律其实题主已经总结出来了,由这几个部分组成
myMeasurement
,就是第 1 个逗号之前的部分,需要匹配起始位^
,所以是/^\w+/
接下来是逗号分隔的键值对,如果包含了
myMeasurement
之后的逗号,就很有规律,每一项是/,\w+=\w+/
再考虑到值有中文,所以等号后面的
\w+
改成[\w\u4e00-\u9fa5]+
,结果/,\w+=[\w\u4e00-\u9fa5]+/
这个项需要重复 n 次,所以把这个正则表达式用
(?: )
括起来,缀+
号表示重复/(?:,\w+=[\w\u4e00-\u9fa5]+)+/
\s
,没啥好说的接下来是另一组键值对,跟之前那组不同,这组没有起始的逗号,所以先加一个没逗号的
/\w+=\w+/
后面再接重复的带逗号的,考虑到只有一组的情况,所以后面的重复用
*
号,而不是+
号/(?:,\w+=\w+/)*
再接空格
\s
,以及一组数字\d+
,并结束字符串$
,所以/\s\d+$/
把上面的各部分组合起来,就是需要的正则表达式
/^\w+(?:,\w+=[\w\u4e00-\u9fa5]+)+\s\w+=\w+(?:,\w+=\w+)*\s\d+$/
取值
使用上面的正则表达式可以判断字符串是否符合格式要求,但要取值会比较难。
如果需要取值,还是直接用代码来写比较好: