正则表达式提取'和'和'或'之间的单词

时间:2018-03-08 06:43:25

标签: java regex

示例文字:

field1=value1field2=[field2Value]field3=field3Value

我想分开这些:

  • field1=value1
  • and
  • field2=[field2Value]
  • or
  • field3=field3Value

请注意,文本不能以'或'或'和'开头/结尾,例如这些文字应该失败

Ex1: and field1=field1Value

例如:2 field1=field1Value and

这是我到目前为止所获得的https://regex101.com/r/TEQujk/1

4 个答案:

答案 0 :(得分:0)

不确定是否是你想要的东西

(?<=^|\band\b|\bor\b) *\b(.*?)\b *(?=$|\band\b|\bor\b)|\b(and|or)\b

基本上这种模式匹配两种不同的情况:

  • 围绕and / or的字符串(以及字符串的开头/结尾)
  • and or自己

给出abc and def or ghi

的样本
  • 第一场比赛,第1组:abc
  • 第二场比赛,第2组:and
  • 第3场比赛,第1组:def
  • 第4场比赛,第2组:or
  • 第5场比赛,第1组:ghi

解释

第一部分

(?<=^|\band\b|\bor\b) *\b(.*?)\b *(?=$|\band\b|\bor\b)
(?<=                )                                   lookbehind
    ^                                                   start of line
     |\band\b                                           or "and" as a whole word
             |\bor\b                                    or "or" as a whole word
                    ) *                                 follow by some spaces
                       \b(.*?)\b                        bunch of words (match as few as possible)
                                  *                      follow by some space
                                    (?=                ) lookahead group
                                       $|\band\b|\bor\b  end of line OR and OR or

或第二部分:

|\b(and|or)\b       OR and/or as a whole word

上述正则表达式仅用于从字符串中提取单个标记。因此它与您的WHOLE字符串不匹配(为了检查有效性)

你应该有你的逻辑来检查令牌是否有意义,或者你可以简单地检查一个单独的正则表达式,如下所示:

^(\w+(\s+and\s+|\s+or\s+))*(\w+)$

答案 1 :(得分:0)

我们可以通过一次调用String#split()来执行此操作,使用不消耗的外观,只要看到和/或。请注意,我在匹配项上调用String#trim(),因为不会消耗空格。

String input = "field1=value1 and field2=[field2Value] or field3=field3Value";
String[] parts = input.split("(?=\\s+(and|or))|(?<=(and|or)\\s+)");
for (String part : parts) {
    System.out.println(part.trim());
}

field1=value1
and 
field2=[field2Value]
or 
field3=field3Value

Demo

答案 2 :(得分:0)

class Main {
  public static void main(String[] args) {
    String str="field1=value1 and field2=[field2Value] or field3=field3Value";
    String test[]=str.split("(?=and|or*+)|(\\s)");
    for (String str1:test)
    {
      if(!str1.equals(""))
      System.out.println(str1);
    }
  }
}

输出:

field1=value1
and
field2=[field2Value]
or
field3=field3Value

答案 3 :(得分:0)

如果值和等号之间没有空格,并且所需参数之间总是有空格,则可以简单地使用

inputString.split("\\s+");