如何使用正则表达式获取单词 "foo" 之后的所有单词 "bar"

How to get all the words "bar" after the word "foo" with regex

我正在尝试检索单词 foo 之后出现的所有 word 栏。

以下内容:

fuu

bar

faa

foobar fuu

bar fuubar

bar

bar fuu

我想检索所有粗体条并忽略第一个斜体格式的条。

我尝试使用以下正则表达式:

(?<=foo)bar

但这只能捕捉到第一次出现的情况。

更新

感谢大家的支持。 下面的数据更接近实际:

Some data

name: Person 1

Some data

my_delimiter:

 name: Person 2

 Some data

name: Person 3

Some data

 name: Person 4

 Some data

Some data

我想获取my_delimiter之后的人的名字:

我在这里测试https://regex101.com/r/HrCLva/2

两件事,取决于你到底在追求什么:

  1. 如果你在一行中出现所有事件,那么你需要使用 re.findall:

    exp = re.compile("foo(?:.*?((bar)+)*)") # See https://regex101.com/r/zzBFFb/1
    match = exp.findall(mystring)
    
  2. 如果你像上面那样出现在多行之后,那么你需要添加一些标志来告诉它不要区别对待换行符:

    exp = re.compile("foo(?:.*?((bar)+)*)", re.DOTALL | re.MULTILINE) 
    match = exp.findall(mystring)
    

更新答案后,不需要正则表达式回溯,您可以使用这样的正则表达式来查找定界符后的名字:

my_delimiter:\s+name:\s*(.*)

Working demo

另一方面,如果您希望所有名称都在分隔符之后,那么您可以使用这样的正则表达式技巧,然后从捕获组中获取内容:

[\s\S]*my_delimiter|name:\s*(.*)$

Working demo 2

捕获组存储以绿色突出显示的数据。