我有一个带有变量/值列表的字符串,例如。
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']
