gpt4 book ai didi

Java Regex for Word 后面没有另一个单词

转载 作者:行者123 更新时间:2023-12-02 03:31:24 25 4
gpt4 key购买 nike

基本上,我正在用 java 编写一个程序,我必须在三个存储桶中的任何一个中对字符串进行分类。

  • 类别 1 - 同时包含“AND”和“AND NOT”的字符串
  • 类别 2 - 带“AND NOT”的字符串
  • 类别 3 - 带“AND”的字符串

我需要一些正则表达式来匹配具有 AND 后跟 NOT(如果不跳过)的字符串。

A AND B AND NOT C - Fail
A AND B AND C - Fail
A AND NOT B AND NOT C - Pass

下面是示例代码片段

public static void main(String[] args) {
String X = "A AND B AND C AND D AND NOT E";
String Y = "A AND NOT C ";
String Z = "A AND B AND D";
ArrayList<String> sampleString=new ArrayList<String>(Arrays.asList(X,Y,Z));

//Category 1 - String with both 'AND' and 'AND NOT'
//Category 2 - String with 'AND NOT' only
//Category 3 - String with 'AND' only

for(String s:sampleString){
if(s.contains("AND") && s.contains("NOT")){
System.out.println("Category 1 -"+s);
}
// This condition is invalid - I need some regex to match this condition. I need to consider only AND followed by NOT if not skip

if(s.contains("AND NOT") && !s.contains("AND")){
System.out.println("Category 2 - "+s);
}
if(s.contains("AND") && !s.contains("NOT")){
System.out.println("Category 3 - "+s);
}
}

输出 -

Category 1 -A AND B AND C AND D AND NOT E
Category 1 -A AND NOT C
Category 3 - A AND B AND D

我尝试了一些正则表达式问题,但没有解决我的问题。我尝试了下面的

String regex="AND(?!\\s+NOT)";

public static void main(String args[]){
String x= "A AND B AND C AND NOT D";
String regex="AND(?!\\s+NOT)";
if(Pattern.compile(regex).matcher(x).find()){
System.out.println("X MATCHED");
}
}
//Returns - X MATCHED

任何帮助将不胜感激!

最佳答案

以下正则表达式 find()循环将确定类别,如果输入与任何列出的类别都不匹配,则返回 0。

private static int categorize(String input) {
Matcher m = Pattern.compile("(?i)\\bAND(\\s+NOT)?\\b").matcher(input);
boolean foundAndNot = false, foundAnd = false;
while ((! foundAndNot || ! foundAnd) && m.find())
if (m.start(1) != -1)
foundAndNot = true;
else
foundAnd = true;
return (foundAndNot ? (foundAnd ? 1 : 3)
: (foundAnd ? 2 : 0));
}

while 循环中 && 条件的左侧只是一个短路,如果两者都找到,则提前退出循环。

(?i)正则表达式中的 是为了使其不区分大小写,这就是正则表达式胜过任何 contains() 实现的地方。

m.start(1) != -1检查的目的是查看捕获组是否匹配,即查看匹配是否包含 NOT 单词。

测试

System.out.println(categorize("A AND B AND NOT C"));     // prints 1
System.out.println(categorize("A AND B AND C")); // prints 3
System.out.println(categorize("A AND NOT B AND NOT C")); // prints 2
System.out.println(categorize("A OR B OR NOT C")); // prints 0

关于Java Regex for Word 后面没有另一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com