Regex 如何使用RE2正则表达式匹配两个字符串之间的子字符串?

Regex 如何使用RE2正则表达式匹配两个字符串之间的子字符串?,regex,go,regex-lookarounds,regex-group,re2,Regex,Go,Regex Lookarounds,Regex Group,Re2,我需要从以下字符串中提取“Design Brands>”和以下第一个管道(|)字符之间的子字符串: "T-shirts|Brands > Port & Company|Design Brands > Montana Griz|Designs > TeamLB Griz > MTG31|T-shirts > TeamLB|T-shirts > Montana Griz" 这是google sheets函数的一部分,所以我必须使用Go的RE2语法 我希望

我需要从以下字符串中提取“Design Brands>”和以下第一个管道(|)字符之间的子字符串:

"T-shirts|Brands > Port & Company|Design Brands > Montana Griz|Designs > TeamLB Griz > MTG31|T-shirts > TeamLB|T-shirts > Montana Griz"
这是google sheets函数的一部分,所以我必须使用Go的RE2语法

我希望下面的表达式会起作用

Design Brands > (.*)\|
但是,表达式匹配字符串中最后一个管道的所有内容 “
Montana Griz | Designs>TeamLB Griz>MTG31 | T恤>TeamLB

而不是管柱中首次出现管道之前的所有情况。我似乎不知道如何将“蒙大拿格里兹”仅隔离在一个捕获组中。

要么让点变懒:

Design Brands > (.*?)\|
或者,如果RE2不支持惰性点,则使用此版本:

Design Brands > ([^|]*)\|

第二种模式是:

Design Brands >    match "Design Brands > "
([^|]*)            then match and capture any character which is NOT pipe
\|                 finally match the first pipe

([^ |]*)
是一个技巧,用于匹配所有内容,包括出现的第一个管道。

如何制作
*
:不是重复的,惰性点在RE2中不起作用。此问题的有效解决方案不会发布在堆栈溢出的任何位置。我花了好几个小时才找到一个。谢谢!第二个版本非常好用。尽管我不知道你的表达中方括号内发生了什么,你能澄清一下吗?@ColinWorf检查更新的答案。