示例文字:
field1=value1
和field2=[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
答案 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
abc
and
def
or
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
答案 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+");