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

ter*_*iid 1 python

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

例如

list1 = ['linux','6.0.1','mysql','5','abcd1234']

list2 = ['linux.*','6.*','mysql|python|gvim','5|6','abcd1234|efgh5678|ijkl91011']
Run Code Online (Sandbox Code Playgroud)

我想迭代匹配list1的正则表达式list2(在上面的情况下是正确的)

或者有比列表更好的方法吗?if/elif 是可能的,但很混乱

sun*_*raj 5

要找到哪个表达式与哪个单词匹配,您可以尝试如下

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'}
Run Code Online (Sandbox Code Playgroud)

如果两个或多个字符串匹配,则采用其他方式

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']}
Run Code Online (Sandbox Code Playgroud)

如果成对的话

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) }
Run Code Online (Sandbox Code Playgroud)