高级正则表达式,具有分组和可能的外观

时间:2017-10-05 09:57:54

标签: java regex

好的,所以我希望借助java中的正则表达式将某些赋值分离成一个字符串组。

My String看起来像这样:

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

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

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

我的想法是:

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

我进行了预测,然后从第一个括号中检查String LogEventDefinition的以下内容。基本上这是完全错误的,尝试了一些其他尝试,但没有任何作用,将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

我认为你甚至可以在不设置正式正则表达式的情况下处理这个问题:

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