Regex 如何使用RE2正则表达式匹配两个字符串之间的子字符串?
我需要从以下字符串中提取“Design Brands>”和以下第一个管道(|)字符之间的子字符串: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语法 我希望
"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检查更新的答案。