简体   繁体   English

希望正则表达式在列表元素中找到匹配项,然后从匹配的字符串中删除不匹配的子字符串

[英]Want Regular Expression to find match in list elements and then remove unmatched substring from the matching strings

There are two python lists:有两个python列表:

list1 = ['/data/model/Analyses/.*:Get', '/data/major/.*/project:Get', '/new/data/.*:Put']
list2 = ['data/model/Analyses/Uk5Ynsk:Get', '/data/major/cbd-05-edf-$/project:Get', '/new/data/${he:llo}/variable:Put', '/data/major/sdf?sj85/project:Get']

From list1, I want to find the match in list2 for each element in list1 .从 list1 中,我想在list2中为list1中的每个元素找到匹配项。 Then want to remove the substring from list2 which is at the place of ".*" in list1.然后想从list2中删除list1中“。*”位置的子字符串。

For example : element from list1 '/data/major/.*/project:Get' is matched with elements from list2 '/data/major/cbd-05-edf-$/project:Get' and '/data/major/sdf?sj85/project:Get'例如: list1 '/data/major/.*/project:Get'中的元素与 list2 '/data/major/cbd-05-edf-$/project:Get''/data/major/sdf?sj85/project:Get'中的元素匹配'/data/major/sdf?sj85/project:Get'

if matched then, substring in the place of ".*" should be removed from the list2如果匹配,则应从 list2 中删除 ".*" 位置的子字符串

list1 = ['/data/model/Analyses/.*:Get', '/data/major/.*/project:Get', '/new/data/.*:Put']
list2 = ['data/model/Analyses/Uk5Ynsk:Get', '/data/major/cbd-05-edf-$/project:Get', '/new/data/${he:llo}:Put', '/data/major/sdf?sj85/project:Get']

    Input1 : '/data/major/.*/project:Get'

    Output2 : '/data/major//project:Get' , '/data/major//project:Get'

    Input2 : '/data/model/Analyses/.*:Get'

    Output2 : 'data/model/Analyses/:Get'

You could surround the desired regex pattern in a group match ( (.*) ), and if a match is found replace the content of that group by an empty string.您可以在组匹配 ( (.*) ) 中包围所需的正则表达式模式,如果找到匹配项,则将该组的内容替换为空字符串。

import re

list1 = ['/data/model/Analyses/.*:Get', '/data/major/.*/project:Get', '/new/data/.*:Put']
list2 = ['/data/model/Analyses/Uk5Ynsk:Get', '/data/major/cbd-05-edf-$/project:Get',
             '/new/data/${he:llo}:Put', '/data/major/sdf?sj85/project:Get']

new_list = []
for l1 in list1:
    for l2 in list2:
        l1_grp = l1.replace('.*','(.*)')
        match = re.search(l1_grp, l2)
        if match:
            new_path = l2.replace(match.group(1),'')
            new_list.append(new_path)

print(new_list)

Output from new_list来自new_list的输出

[
    '/data/model/Analyses/:Get',
    '/data/major//project:Get',
    '/data/major//project:Get',
    '/new/data/:Put'
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM