Regex 正则表达式以获得不同的匹配

Regex 正则表达式以获得不同的匹配,regex,regexp-replace,Regex,Regexp Replace,这是我的输出: CASE 1: ---------------------------------- Drop Pack: FALSE Drop Flow: FALSE ---------------------------------- CASE 2: ---------------------------------- Drop Flow: TRUE Fail Open: FALSE Fail Close: FALSE ----------------------------

这是我的输出:

CASE 1:
---------------------------------- 
Drop Pack: FALSE 
Drop Flow: FALSE 
---------------------------------- 
CASE 2:
---------------------------------- 
Drop Flow: TRUE 
Fail Open: FALSE 
Fail Close: FALSE 
---------------------------------- 
CASE 3:
---------------------------------- 
Drop Flow: FALSE 
我需要一个正则表达式来匹配以下值:

 Drop Flow: TRUE (UNDER CASE2)
正则表达式1:仅获取以下第一个匹配

 Drop Flow: FALSE (UNDER CASE1)
正则表达式2:仅获取第二个匹配项,如下所示:

 Drop Flow: TRUE (UNDER CASE2)
我的正则表达式是:

Drop Flows:\s+([A-Z]+)
但这给出了所有3个匹配项(案例1、案例2和案例3)。如何获得个人比赛

提前感谢

按照建议尝试:

(CASE \d+)(?:(?!CASE \d+)[\s\S])*(Drop Flow: (?:TRUE|FALSE))
  • 模式开始使用
    CASE\d+
    搜索头锚,并将其放入
    $1
  • 使用不包含此字符串的所有内容
    (?:(?!CASE\d+[\s\s])*
    ,以避免从另一个CASE获取滴流值
  • 最后,搜索结束锚点
    (Drop Flow:(?:TRUE | FALSE))
    ,并将其放入
    $2

下面是一些Python代码:

import re
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1
        print ("Group {groupNum}: {group}".format(groupNum = groupNum, group = match.group(groupNum)))

如果只希望前两个匹配项而不希望第三个匹配项打开,则可以添加一个正向前瞻
(?=\s*\r?\n\s)
,它声明后面应该有一行以非空白字符开头
\s

Drop Flow:\s+([A-Z]+)(?=\s*\r?\n\S)

另一个选项是捕获组1中的值,以及组2中的TRUE FALSE部分,并确保有一个以连字符开头的结束行

^CASE \d+:\r?\n-+[^\S\r\n]*(?:\r?\n(?!Drop Flow:).*)*\r?\n(Drop Flow: (TRUE|FALSE))[^\S\r\n]*(?:\r?\n(?!-).*)*\r?\n-

像这样试试看,您使用的是哪种环境或语言?Robot framework