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获取滴流值(?:(?!CASE\d+[\s\s])*
- 最后,搜索结束锚点
,并将其放入(Drop Flow:(?:TRUE | FALSE))
$2
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