【发布时间】:2019-10-10 14:07:12
【问题描述】:
我正在尝试创建一个正则表达式,可以将上面的整个行匹配到单独的组中:
示例消息:2019-10-07 11:13:19.75 New York America INFO Server is connected. Server Id [34] Address [127.0.0.1:54266]
编辑:这些组由多个空格字符分隔,至少 2 个空格字符,但通常是 3 个。
EDIT2:消息部分中括号内的术语可能根本不出现,或者一个可能没有另一个出现,或者它们可能以不同的顺序出现。
组 1:2019-10-07 11:13:19.75
第二组:New York
第三组:America
第 4 组:INFO
第 5 组:Server is connected. Server Id [34] Address [127.0.0.1:54266]
我还尝试选择方括号 ([ ]) 内的任何内容,以及 IP 地址的特殊匹配情况。不过,这不必包含在同一个正则表达式中。但如果可能的话会很好。
我已经能够匹配各个组,但我似乎无法在 1 行中完成所有操作。
这是我目前所拥有的:
组 1:/[0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{2}/
第二组:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}.*)\S+/
第三组:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}.*\S.\s{3}).?\S+/
Group4:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}(.*\S.\s{3}){2}).?\S+/
第 5 组:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}(.*\S.\s{3}){3}).*/
任何帮助将不胜感激。
【问题讨论】:
-
你怎么知道
York America和New York的区别? -
字段之间的字符是什么?多个空格字符,一个列表,还是其他什么?如果是多个空格字符,它们的数量是固定的还是取决于字段的长度?
-
我会说你过于复杂了,你需要做的就是分割字符串,不管分割字符是什么,工作完成。如果你不能这样做,你将不会对正则表达式有更多的乐趣,因为你仍然不知道分隔符是什么。这似乎是格式很差的数据,JSON 或 CSV 将是发送数据的更好选择
-
喜欢
string.split(/\s{2,}/)? -
假设字段本身永远不会包含超过一个连续空格是否合理?这将使解决方案变得微不足道(使用 `{2,}` 作为分隔符)
标签: javascript regex regex-group