如何比较Python中元素为正则表达式的列表?
我希望比较两个列表,一个列表包含普通数据,第二个列表包含正则表达式并返回匹配项 e、 g 我想用如何比较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
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从我这里得到好的代码。