Если каждый элемент, который вы хотите извлечь, начинается с var
, вы можете использовать этот факт следующим образом:
import re
string = " var1 = 20, var2 = hello var3 =345.34 var4 = I have lost 2,5 billions, var5 = Bill"
vars = re.findall(r'var.*?(?=var|$)',string)
print(vars) # ['var1 = 20, ', 'var2 = hello ', 'var3 =345.34 ', 'var4 = I have lost 2,5 billions, ', 'var5 = Bill']
Я использовал так называемый положительный прогноз (вид утверждения нулевой длины), поэтому findall
ищет подстроки, за которыми следует var
или конец str
($
).Как видите, str
s внутри vars
все еще нуждается в некоторой чистке.Сначала удалите завершающие пробелы:
vars = [i.strip(' ') for i in vars]
print(vars) # ['var1 = 20,', 'var2 = hello', 'var3 =345.34', 'var4 = I have lost 2,5 billions,', 'var5 = Bill']
Теперь ваш пример для меня неясен - я не знаю, хотите ли вы сохранить конечные ,
s как в var1 = 20,
или удалить его как в var4=I lost 2,5 billions
-поэтому я сохраняю ,
s, поскольку они отмечают, что они могут быть удалены таким же образом, как показано для пробелов.Наконец, чтобы удалить пробелы вокруг =
, вы можете использовать re.sub
следующим образом:
vars = [re.sub(r' *= *','=',i,1) for i in vars]
print(vars) #['var1=20,', 'var2=hello', 'var3=345.34', 'var4=I have lost 2,5 billions,', 'var5=Bill']
Обратите внимание, что 1
в re.sub
является преднамеренным, поэтому произойдет только замена 1
- так будетвыбрасывать пробелы только вокруг первых =
в каждом элементе vars
.Вы можете отбросить это 1
, если уверены, что в каждом элементе содержится не более 1 =
.