条件结果,如If-Regex中的Else

时间:2018-09-26 19:34:06

标签: regex

我想从这三个可能全部出现在文本中的字符串值“一二三”中获取结果。我想使用正则表达式搜索“一个”并返回它(如果找到);否则,搜索“ two”并返回(如果找到);最后,如果找不到“两个”,只需与“三个”匹配。

3 个答案:

答案 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验证:

enter image description here

答案 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