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

时间:2019-06-07 01:08:20

标签: regex go regex-lookarounds regex-group re2

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

"T-shirts|Brands > Port & Company|Design Brands > Montana Griz|Designs > TeamLB Griz > MTG31|T-shirts > TeamLB|T-shirts > Montana Griz"

这是在Google表格功能内,因此我必须使用Go的RE2语法

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

Design Brands > (.*)\|

但是,表达式将所有内容匹配到字符串中的最后一个管道 “ Montana Griz|Designs > TeamLB Griz > MTG31|T-shirts > TeamLB” 而不是字符串中第一次出现管道之前的所有内容。我似乎无法弄清楚如何在捕获组中仅隔离“蒙大拿州”。

1 个答案:

答案 0 :(得分:1)

让点变得懒惰:

Design Brands > (.*?)\|

或者,如果RE2不支持惰性点,则使用以下版本:

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

Demo

第二种模式表示:

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

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