我们的业务规则如下所示:
String S= "IF (A=3 AND B=2)=0 AND IF(c=4 AND D=5)=1 AND (AGE>=15 AND AGE<=45)"
我必须将上面的字符串分成三部分,如下所示:
IF (A=3 AND B=2)=0
IF(c=4 AND D=5)=1
(AGE>=15 AND AGE<=45)
我尝试使用以下正则表达式[^AND].*\\)=0|1
来分割,我得到前两个但不是最后一个(AGE>=15 AND AGE<=45)
。
任何人都可以帮我吗?我缺少什么?
答案 0 :(得分:1)
当不在括号内时,通过断言(通过向前看)下一个括号char(如果有的话)是一个开括号,在AND
上拆分:
String[] parts = str.split(" *AND *(?=[^)]*(\\(|$))");
以下是一些显示此功能的测试代码:
String str = "IF (A=3 AND B=2)=0 AND IF(c=4 AND D=5)=1 AND (AGE>=15 AND AGE<=45)";
String[] parts = S.split(" *AND *(?=[^)]*(\\(|$))");
System.out.println(Arrays.toString( parts));
输出:
[IF (A=3 AND B=2)=0, IF(c=4 AND D=5)=1, (AGE>=15 AND AGE<=45)]
答案 1 :(得分:0)
String s =
"IF (A=3 AND B=2)=0 AND IF(c=4 AND D=5)=1 AND (AGE>=15 AND AGE<=45)";
Pattern exprPattern = Pattern.compile("(IF\\s*\\(.*?\\)=[01]|\\(.*\\))");
Matcher m = exprPattern.matcher(s);
while (m.find()) {
System.out.println("* " + m.group());
}
这试图通过两个替代子模式来识别这三个部分:
(
IF\\s*\\(.*?\\)=[01]
|
\\(.*\\)
)
.*?
确保最短的序列与整个模式匹配。
答案 2 :(得分:0)
以下是一些代码:
String s = "IF (A=3 AND B=2)=0 AND IF(c=4 AND D=5)=1 AND (AGE>=15 AND AGE<=45)";
for (String part : s.split("AND (?=[^)]*(\\(|$))")) {
System.out.println(part);
}
产地:
IF (A=3 AND B=2)=0
IF(c=4 AND D=5)=1
(AGE>=15 AND AGE<=45)
答案 3 :(得分:0)
String s = "IF (A=3 AND B=2)=0 AND IF(c=4 AND D=5)=1 AND (AGE>=15 AND AGE<=45)";
String[] a =s.split("(?<=(\\)=[01]))\\sAND\\s");
for(String d:a){
System.out.println(d);
}
输出
IF (A=3 AND B=2)=0
IF(c=4 AND D=5)=1
(AGE>=15 AND AGE<=45)