提问
我正在一个日志解析器上,应该解析这样的行:ID1 : 0 ID2 : 214 TYPE : ERROR DATE : 2012-01-11 14:08:07.432 CLASS : Maintenance SUBCLASS : Operations
ID1,ID2,TYPE,DATE,CLASS和SUBCLASS都是关键字,我想要这样的内容:
ID1 : 0
ID2 : 214
TYPE : ERROR
DATE : 2012-01-11 14:08:07.432
CLASS : Maintenance
SUBCLASS : Operations
我对regex确实很陌生,我有以下几点:
(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)\\s*:\\s*(.+?)\\s*[(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)]
当然,它不起作用.
任何建议将不胜感激.
最佳答案
表达式中的主要问题是方括号,它们创建了一个character class,它与里面的一个字符完全匹配.(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)\\s*:\\s*(.+?)\\s*[(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)]
^ ^
我在末尾也做了一个替换,也就是positive lookahead assertion(以?=开头的组),所以这是不匹配的,只是确保这些选择之一在前面.我还在字符串$的末尾添加了交替符.
(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)\\s*:\\s*(.+?)\\s*(?=ID1|ID2|TYPE|DATE|CLASS|SUBCLASS|$)
请参见here on Regexr,它是测试正则表达式的好工具!