【发布时间】:2023-03-21 10:04:02
【问题描述】:
我有一个示例多行字符串,如下所示:
[+] x: somerandomstuff
[!] blah
[+] x: somemorerandomstuff
[-] blah
[+] START
[+] x: 1st group to match
[!] blah
[-] blah
[+] x: 2nd group to match
[+] END
我想匹配 x: 之后看起来像 [+] x: (...) 的行中的字符串,但只匹配那些在 [+] START 和 [+] END 之间的字符串。预期结果将是两组(可能更多):
1st group to match
2nd group to match
请注意,START/END 只有一个实例。
我只设法想出了与第一组匹配的东西:
\[\+\] START.*?\[\+\] x: (.*?)\n.*\[\+\] END
我目前缺乏扩展此正则表达式以匹配其他行的知识。我不确定如何在另一个模式([+] START 和 [+] END)之间查找与一个模式匹配的多行
REGEX101 链接:https://regex101.com/r/kCgwhr/2
注意:我知道仅使用正则表达式的解决方案可能不是最好的选择,但我想仅使用正则表达式来解决这个问题。
【问题讨论】:
-
这对于单个正则表达式是不可能的。不能匹配任意多个不连续的子字符串。
-
如果不一定要匹配
START可以 look around 匹配END而没有START直到下一个END:\[\+\] x: (.*+)$(?=(?>\n(?!\[\+\] START).*)*\n\[\+\] END) -
@Juicy 在 Python 中,您可以使用 try this variant,它的魔力较小(与
re.MULTILINE一起使用)。要使用\G回答正则表达式,您可能需要alternative regular expression module。指定正则表达式风格总是好的。