如何比较其元素在Python中是正则表达式的列表?

时间:2014-07-22 08:58:07

标签: python

我希望比较两个列表,一个列表具有普通数据,第二个列表具有正则表达式并返回匹配

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是可能但是凌乱

1 个答案:

答案 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) }