好吧,所以我想借助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"
演示: