刚开始使用python,很难按多个/不同数量的匹配项对字符串列表排序。基本上,给定一个字符串列表,我需要按给定的正则表达式(用户提供)拆分每个字符串,然后按给定的键列表(位置)进行排序。键可以是单个整数,也可以是按排序顺序排列的列表。例如:
正则表达式=r'.(FF | TT | SS)([-.\d]+v)([-.\d]+c)(FF | TT | SS)。'
键=[2,1,3]
将按location2、location1、location3对字符串列表进行排序。在
我有一个适用于固定数量的位置/关键点的以下方法,但不知道如何使其在不同数量的“关键点”下工作:
import re
strlist = ["synopsys_SS_2v_-40c_SS.lib","synopsys_SS_1v_-40c_SS.lib","synopsys_SS_2v_-40c_TT.lib","synopsys_FF_3v_-40c_FF.lib", "synopsys_TT_4v_125c_TT.lib", "synopsys_TT_1v_-40c_TT.lib"]
regex = r'.*(FF|TT|SS)_([-\.\d]+v)_([-\.\d]+c)_(FF|TT|SS).*'
key = [2,1,3]
sfids_single = sorted(strlist, key=lambda name: (
re.findall(regex,name)[0][key[0]],
re.findall(regex,name)[0][key[1]],
re.findall(regex,name)[0][key[2]]))
尝试了以下方法,但似乎不起作用:
^{pr2}$也尝试过(没有成功):
for i in key:
strlist.sort(key=lambda name: re.findall(regex,name)[0][key[i]])
预期结果:
['synopsys_SS_1v_-40c_SS.lib', 'synopsys_TT_1v_-40c_TT.lib', 'synopsys_SS_2v_-40c_SS.lib', 'synopsys_SS_2v_-40c_TT.lib', 'synopsys_FF_3v_-40c_FF.lib', 'synopsys_TT_4v_125c_TT.lib']
我是不是完全走错了路?非常感谢任何指导。在
非常感谢@a_guest提供了拼图中缺失的部分。解决方法如下:
编写一个键函数,该函数将按优先级顺序返回每个字符串的相关部分,并将该函数用于排序键。在
使用正则表达式拆分字符串
^{pr2}$键函数可以不使用正则表达式来编写,这可能会使它变得不那么复杂。在
您可能希望使用比
a, b, c, d
更具描述性的名称。它依赖于具有相同模式的字符串。在相关问题 更多 >
编程相关推荐