我希望比较两个列表,一个列表包含普通数据,第二个列表包含正则表达式并返回匹配项
例如
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 是可能的,但很混乱
要找到哪个表达式与哪个单词匹配,您可以尝试如下
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)
| 归档时间: |
|
| 查看次数: |
1797 次 |
| 最近记录: |