Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较Python中元素为正则表达式的列表?_Python - Fatal编程技术网

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

如何比较Python中元素为正则表达式的列表?,python,Python,我希望比较两个列表,一个列表包含普通数据,第二个列表包含正则表达式并返回匹配项 e、 g 我想用list2中的正则表达式在list1上迭代一次匹配(在上面的例子中是这样的) 还是有比列出清单更好的方法?如果/elif是可能的,但很混乱,要找到哪个表达式与哪个单词匹配,可以尝试如下操作 list1 = ['linux','6.0.1','mysql','5','abcd1234'] list2 = ['linux.*','6.*','mysql|python|gvim','5|6','ab

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

e、 g

我想用
list2
中的正则表达式在
list1
上迭代一次匹配(在上面的例子中是这样的)


还是有比列出清单更好的方法?如果/elif是可能的,但很混乱,要找到哪个表达式与哪个单词匹配,可以尝试如下操作

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

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

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

听起来像是一个问题。你想要一个项目一个项目的匹配<代码>[…对于zip(列表1,列表2)中的(a,b)]还是像你说的那样迭代?对于上面的例子,我认为,
zip
ing会更好。@undinedisnotation函数不,不是。关于代码审查的问题必须包含完整和正确的代码(如果它没有运行,或者如果它没有产生正确的输出,那么它就脱离主题)。在这种情况下,OP甚至没有不正确的完整代码。听起来像是一个问题。您是希望在zip(列表1,列表2)中逐项匹配(a,b),还是像您所说的那样迭代?对于上面的例子,我认为,
zip
ing会更好。@undinedisnotation函数不,不是。关于代码审查的问题必须包含完整和正确的代码(如果它没有运行,或者如果它没有产生正确的输出,那么它就脱离主题)。在这种情况下,OP甚至没有错误的完整代码。我认为这是一个很好的解决方案+1(不是你的选民之一),我认为OP可能需要两两比较,而不是全对全比较。这个问题不是很清楚,但正则表达式和字符串的对齐方式有点指向这一点。不清楚的问题不是-1的基础+我想这是一个很好的解决方案+1(不是你的选民之一),我认为OP可能需要两两比较,而不是全对全比较。这个问题不是很清楚,但正则表达式和字符串的对齐方式有点指向这一点。不清楚的问题不是-1的基础+1从我这里得到好的代码。