regex for list of names from string

tests:

  1. 'Artist: Frank Gaard; Artist: Stuart Mead; Author: Frank Gaard; Author: Stuart Mead; Publisher: Le Dernier CRI, Marseille, France'
  2. 'Artist: Fusen'
  3. 'Artist: Tsujimura Shirō'
  4. 'Artist: Frank Gaard abc xyz; Artist: Stuart Mead; Author: Frank Gaard; Author: Stuart Mead; Publisher: Le Dernier CRI, Marseille, France'

output:

  1. ['Frank Gaard', 'Stuart Mead']
  2. ['Fusen']
  3. ['Stuart Mead']
  4. ['Frank Gaard abc xyz', 'Stuart Mead']

I want list of only artists name. so, far i have came up with r'Artist:\s*(.*)(?:;|$)' this regex but it only works with single artists(case 2 and 3). can somebody suggest general solution for all. I am trying to extract details between : and ;(if present).

In [10]: reg_str = 'Artist: Tsujimura Shirō xyz abc'

In [11]: re.findall(r’Artist:\s*(.*)(?:;|$)', reg_str)
Out[11]: [‘Tsujimura Shirō xyz abc’]


#python #regex

1 Likes1.80 GEEK