正则表达式提取'and'和'or'以及介于两者之间的单词



示例文本:

field1=value1field2=[field2Value]field3=field3Value

我想分别得到这些:

  • field1=value1
  • and
  • field2=[field2Value]
  • or
  • field3=field3Value
请注意,文本

不能以"or"或"and"开头/结尾,例如,这些文本应该失败

例1:and field1=field1Value

例如:2 field1=field1Value and

到目前为止,我得到了什么 https://regex101.com/r/TEQujk/1

我们可以通过一次调用 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

演示

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

不确定这是否是你想要的

(?<=^|bandb|borb) *b(.*?)b *(?=$|bandb|borb)|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

解释

第一部分

(?<=^|bandb|borb) *b(.*?)b *(?=$|bandb|borb)
(?<=                )                                   lookbehind
    ^                                                   start of line
     |bandb                                           or "and" as a whole word
             |borb                                    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
                                       $|bandb|borb  end of line OR and OR or

或第二部分:

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

上面的正则表达式仅用于从字符串中提取单个令牌。 所以它与您的整个字符串不匹配(供您检查有效性(

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

^(w+(s+ands+|s+ors+))*(w+)$

如果值和等于之间没有空格,并且所需的参数之间总是有一个空格,您可以简单地使用

inputString.split("\s+");

相关内容