好的,所以我希望借助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的以下内容。基本上这是完全错误的,尝试了一些其他尝试,但没有任何作用,将非常感谢你的帮助。
答案 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"
在这里演示: