我希望比较两个列表,一个列表具有普通数据,第二个列表具有正则表达式并返回匹配
e.g。
list1 = ['linux','6.0.1','mysql','5','abcd1234']
list2 = ['linux.*','6.*','mysql|python|gvim','5|6','abcd1234|efgh5678|ijkl91011']
我希望使用list1
中的正则表达式对list2
进行迭代以获得匹配(在上述情况下将为真)
还是有更好的方式去而不是列表? if / elif是可能但是凌乱
答案 0 :(得分:2)
找到哪个表达式可以匹配哪个单词,如下所示
list1 = ['linux','6.0.1','mysql','5','abcd1234']
list2 = ['linux.*','6.*','mysql|python|gvim','5|6','abcd1234|efgh5678|ijkl91011']
import re
print {i:j for j in list1 for i in list2 if re.match(i,j)}
#output {'mysql|python|gvim': 'mysql', 'abcd1234|efgh5678|ijkl91011': 'abcd1234', '5|6': '5', 'linux.*': 'linux', '6.*': '6.0.1'}
如果两个或多个字符串匹配
,则为其他方式list1 = ['linux','6.0.2','6.0.1','mysql','5','abcd1234']
list2 = ['linux.*','6.*','mysql|python|gvim','5|6','abcd1234|efgh5678|ijkl91011']
import re
print {i:[j for j in list1 if re.match(i,j)] for i in list2 }
#output {
'mysql|python|gvim': ['mysql'],
'abcd1234|efgh5678|ijkl91011': ['abcd1234'],
'5|6': ['6.0.2', '6.0.1', '5'],
'linux.*': ['linux'],
'6.*': ['6.0.2', '6.0.1']}
如果配对
list1 = ['linux','6.0.1','mysql','5','abcd1234']
list2 = ['linux.*','6.*','mysql|python|gvim','5|6','abcd1234|efgh5678|ijkl91011']
import re
print {j:i for i,j in zip(list1,list2) if re.match(j,i) }