Skip to main content
 首页 » 编程设计

python之在具有不同分隔符和值内容的标签/值列表中拆分字符串

2025年05月04日20zhujiabin

我有一个带有变量/值列表的字符串,例如。

string = " var1 = 20, var2  = hello    var3 =345.34  var4 = I have lost  
2,5 billions, var5 = Bill" 

元组的分隔可以是“,”或者任意数量的空格,元组的标识始终是“=” 挑战在于一些值包含描述性字符串,其中逗号作为千位分隔符或最差的数字分隔符。

我尝试使用 python 正则表达式的 re.sub 和 re.findall 序列,但我无法正确拆分 var4 元组,在代码下方:

import re 
string = " var1 = 20, var2  = hello    var3 =345.34  var4 = I lost 2,5  
billions, var5 = Bill" 
 
t = re.sub('(\=\s+)', '=', string) 
t = re.sub('(\s+\=)', '=', t) 
result = re.findall("[A-Za-z0-9(,)\=\.]+", t) 
 
print(result) 
['var1=20,', 'var2=hello', 'var3=345.34', 'var4=I', 'lost', '2,5',  
'billions,', 'var5=Bill'] 

我的预期结果是

['var1=20', 'var2=hello', 'var3=345.34', 'var4=I lost 2,5 billions', 'var5=Bill'] 

请您参考如下方法:

你可以使用

re.split(r',?\s+(?=\w+=)', re.sub(r'\s*=\s*', '=', s.strip())) 

re.sub(r'\s*=\s*', '=', s.strip()) 将在剥离后删除 = 周围的空格字符串中的前导/尾随空格和 r',?\s+(?=\w+=)' with re.split 将在可选逗号处拆分字符串,然后1 个或多个空格,后跟 1 个以上的字符,然后是 =。

参见 Python demo :

import re 
s = " var1 = 20, var2  = hello    var3 =345.34  var4 = I lost 2,5 billions, var5 = Bill" 
result = re.split(r",?\s+(?=\w+=)", re.sub(r'\s*=\s*', '=', s.strip())) 
print(result) 
# => ['var1=20', 'var2=hello', 'var3=345.34', 'var4=I lost 2,5 billions', 'var5=Bill']