我想从这三个可能全部出现在文本中的字符串值“一二三”中获取结果。我想使用正则表达式搜索“一个”并返回它(如果找到);否则,搜索“ two”并返回(如果找到);最后,如果找不到“两个”,只需与“三个”匹配。
答案 0 :(得分:0)
如果我很了解您的问题,
^(?:.*\K\bone\b|.*\K\btwo\b|.*\K\bthree\b)
每个分支都会测试一个单词,因为从左到右评估了一个交替,所以第一个正确的断言获胜,而这与字符串中的单词顺序无关。
答案 1 :(得分:0)
RkRaider 在这里,我使用带有嵌套条件的If-Else条件正则表达式。
正则表达式中的If-Else:
(?(?=regex)then|else)
正则表达式:
(?(?=one)one|(?(?=two)two|three))
通过regex101验证:
答案 2 :(得分:0)
我怀疑您想要
(?=.*\b(one)\b)?(?=.*\b(two)\b)?(?=.*\b(three)\b)?
但是随后,您需要使用某种编程语言来确定所发现的优先级最高的逻辑。 例子
$ cat strings
one two three
two one three
three two one
bone two threed
bone town three
$ perl -lnE '
print;
/(?=.*\b(one)\b)?(?=.*\b(two)\b)?(?=.*\b(three)\b)?/ and print "got:", $1 || $2 || $3
' strings
one two three
got:one
two one three
got:one
three two one
got:one
bone two threed
got:two
bone town three
got:three