Java 字符串正则表达式无法拆分闭括号中的单词
我正在使用一个字符串正则表达式来拆分下面的字符串Java 字符串正则表达式无法拆分闭括号中的单词,java,regex,string,split,tokenize,Java,Regex,String,Split,Tokenize,我正在使用一个字符串正则表达式来拆分下面的字符串 String input = "( Customer.browse == \"Car Loan\" ) AND ( Campaign.period BETWEEN 2400 AND 600 ) " + "AND ( Customer.eligibity == TRUE ) AND ( Campaign.campaign_name == \"Browse To Start\") " + "AND (
String input = "( Customer.browse == \"Car Loan\" ) AND ( Campaign.period BETWEEN 2400 AND 600 ) "
+ "AND ( Customer.eligibity == TRUE ) AND ( Campaign.campaign_name == \"Browse To Start\") "
+ "AND ( Customer.application_started == \"Car Loan\" ) AND ( Time.currenttime BETWEEN 800 AND 2000 ) "
+ "THEN ( Notification.message == SUPPRESS)";
我的字符串标记器类如下所示
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringRegexClass {
public ArrayList<String> stringTokenizer(String str) {
ArrayList<String> tokenList = new ArrayList<String>();
Pattern pattern = Pattern.compile("[(\")]|\\w+.\\w+.\\w+|\\w+.\\w+|==");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
tokenList.add(matcher.group());
}
return (tokenList);
}
}
import java.util.ArrayList;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类StringRegSS{
公共ArrayList stringTokenizer(字符串str){
ArrayList tokenList=新的ArrayList();
模式模式=模式。编译(“[(\”)\\w+。\\w+。\\w+。\\w+。\\w+。\\w+。\\w+)=”;
Matcher-Matcher=pattern.Matcher(str);
while(matcher.find()){
添加(matcher.group());
}
返回(令牌列表);
}
}
当我将字符串传递给上面的类时,得到如下输出
我想将括号(Time.currenttime介于800和2000之间)和(Campaign.period介于2400和600之间)
中的字符串拆分如下
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringRegexClass {
public ArrayList<String> stringTokenizer(String str) {
ArrayList<String> tokenList = new ArrayList<String>();
Pattern pattern = Pattern.compile("[(\")]|\\w+.\\w+.\\w+|\\w+.\\w+|==");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
tokenList.add(matcher.group());
}
return (tokenList);
}
}
我尝试了不同的方法,但都不起作用。请您建议我需要对regex表达式进行哪些更改才能使其起作用我建议您完整捕获带引号的字符串 您需要退出
您可以使用以下正则表达式,但请注意,它会自动跳过任何无法识别的内容:
[()]|“[^”]*“|\w+(?:\。\w+|==
在Java 4+中:
public static List<String> stringTokenizer2(String str) {
List<String> tokenList = new ArrayList<>();
Pattern pattern = Pattern.compile("[()]|\"[^\"]*\"|\\w+(?:\\.\\w+)?|==");
for (Matcher matcher = pattern.matcher(str); matcher.find(); )
tokenList.add(matcher.group());
return tokenList;
}
输出
(
Customer.browse
==
“汽车贷款”
)
和
(
竞选期间
之间
2400
和
600
)
和
(
顾客满意度
==
符合事实的
)
和
(
活动。活动名称
==
“浏览以开始”
)
和
(
Customer.application\u已启动
==
“汽车贷款”
)
和
(
Time.currenttime
之间
800
和
2000
)
然后
(
通知消息
==
镇压
)
在正则表达式中有特殊的含义,因此需要对其进行转义。我希望你忘了这么做,因为如果你不知道正则表达式的核心,非常基本的一部分,那么你需要多学一点正则表达式。@Andreas我也试过了,但没有用我是正则表达式的新手我现在正在学习和做Andreas-在问题中,“
在汽车贷款前后“
已作为单独的组捕获。@ArvindKumarAvinash是。所以你读过我答案的第一行了吗?是的,你提到过,我建议你完整地捕获带引号的字符串。
。是否可以单独捕获报价?我曾试图这样做,但迄今为止失败了。我来自@ArvindKumarAvinash,因为OP对regex来说是新的,我们现在应该保持简单,这就是为什么我建议进行更改,保持简单。是的,这是可以做到的,但我们需要高级正则表达式功能,如零宽度正前视和零宽度正前视,而OP似乎还没有准备好使用这些高级功能。@Rahul若要匹配其他比较运算符,请添加|!=|=代码>结束。
String input = "( Customer.browse == \"Car Loan\" ) AND ( Campaign.period BETWEEN 2400 AND 600 ) AND ( Customer.eligibity == TRUE ) AND ( Campaign.campaign_name == \"Browse To Start\") AND ( Customer.application_started == \"Car Loan\" ) AND ( Time.currenttime BETWEEN 800 AND 2000 ) THEN ( Notification.message == SUPPRESS)";
for (String token : stringTokenizer(input))
System.out.println(token);