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

时间:2019-11-27 17:41:21

标签: python regex regex-lookarounds

我正在尝试检索单词 foo 之后所有单词条。

内容下方:

  

fuu

     

bar

     

faa

     

foo bar fuu

     

酒吧 fuu 酒吧

     

     

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这里进行测试

2 个答案:

答案 0 :(得分:1)

更新答案后,无需在后面查找正则表达式,可以使用如下正则表达式在定界符后查找名字:

> data
   id    a    b
1   1   11  111
2   2   22  222
3   3  333  333
4   4   44  444
5   5   55  555
6   6  666  666
7   7   77  777
8   8   88  888
9   9   99  999
10 10 1099 1099

Working demo

另一方面,如果要在定界符后使用所有名称,则可以使用这样的正则表达式技巧,然后从捕获组中获取内容:

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

Working demo 2

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

enter image description here

答案 1 :(得分:0)

两件事,具体取决于您所追求的是:

  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)