import re
s = 'ABC 12/5 a1 b-2.5 c34.5d54'
parts = re.findall('([a-z]+)(-?\d+(?:\.\d+)?)|([^ /]+)', s)
somelist = [rest for (key, value, rest) in parts if key == '']
vars = dict((key, float(value)) for (key, value, rest) in parts if key != '')
print(somelist)
print(vars)
我提议这样做:
输出:
“变量”实际上是作为字典键输出的,我认为这更合适
说明
此正则表达式:
会以某种方式匹配任何不是空格或斜杠的东西。首先,它尝试匹配
|
之前的部分:这将匹配后跟数字的任何字母序列。字母在第一组中(参见括号),数字部分在第二组中。该数字可以可选地具有减号(
-?
)和/或小数部分((?:\.\d+)?
),其不在单独的组中捕获(因此?:
)如果失败,则正则表达式的另一部分开始工作:
这会将下一个分隔符之前的任何内容捕获到第三个捕获组中
现在
findall
对其进行了一个很好的数组,每个部分都在每个子数组的相应索引处结束两个列表理解分别处理两个不同的案例,并将结果收集在数组(匹配第三个捕获组)或dict(匹配前两个捕获组)中
相关问题 更多 >
编程相关推荐