带有分组的高级正则是等级的正则是

  • 本文关键字:高级正 java regex
  • 更新时间 :
  • 英文 :


好吧,所以我想借助Java中的正则表达式将某些作业从字符串中分为串。

我的字符串看起来像这样:

LogEventDefinition(
logEvent = LogEvent.MESSAGE700,
process = process.Data,
processStep = "action")

我的最终解决方案应该像这样分组:

group 1      group 2
logEvent     LogEvent.MESSAGE700
process      process.Data
processStep  action

我的想法是:

(?=@LogEventDefinition()(w+)s=(sw+)|(?:sw+.(w+))\)

我做一个lookahead,然后从第一个支架上检查字符串logeventDefinition的以下内容。从本质上讲,这是完全错误的,尝试了其他一些尝试,但没有任何可行的方法,会很感激您的帮助。

我认为您甚至可以在不设置正式的正则时处理此操作:

String input  = "LogEventDefinition(";
       input += "logEvent = LogEvent.MESSAGE700,";
       input += "process = process.Data,";
       input += "processStep = "action")";
input = input.replaceAll("\w+\((.*)\)", "$1");  // remove function wrapper
String[] parts = input.split(",\s*");             // split terms by comma
List<String> group1 = new ArrayList<>();
List<String> group2 = new ArrayList<>();
for (String part : parts) {
    group1.add(part.split("\s*=\s*")[0]);        // assign group1 term
    group2.add(part.split("\s*=\s*")[1]);        // assign group2 term
}
System.out.println("group1, group2");
for (int i=0; i < group1.size(); ++i) {
    System.out.println(group1.get(i) + ", " + group2.get(i));
}

作为附带说明,我无法弄清楚您是否要围绕术语删除引号,或者您的任何原始数据首先是否具有报价。如果要删除报价,我可以对上述代码进行微小的修复以处理此要求。

输出:

group1, group2
logEvent, LogEvent.MESSAGE700
process, process.Data
processStep, "action"

演示:

rextester

最新更新