如何从python列表中排除一个单词?

如何从python列表中排除一个单词?,python,regex,list,Python,Regex,List,我正在尝试使用Python正则表达式。我的名单如下: ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF'] 我需要选择所有以MYTAB开头的值,不包括MYTAB-2。 结果应该是: ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-PERF'] 它的正则表达式语法应该是什么?您可以使用正则表达式/MYTAB-[^2]+/。语法[^2]表示除2之外的所有内容。您可以使用regex/MYTAB-[^2

我正在尝试使用Python正则表达式。我的名单如下:

['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
我需要选择所有以
MYTAB
开头的值,不包括
MYTAB-2
。 结果应该是:

['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-PERF']

它的正则表达式语法应该是什么?

您可以使用正则表达式
/MYTAB-[^2]+/
。语法
[^2]
表示除
2

之外的所有内容。您可以使用regex
/MYTAB-[^2]+/
进行此操作。语法
[^2]
表示除
2

之外的所有代码。您可以使用这段代码

  • 它将在初始列表
    l1
    中循环,如果项目
    以(“MYTAB”)
    开始,它将被添加到列表
    l2
  • 它将在
    l2
    列表中找到
    MYTAB-2
    的索引
  • 删除
    MYTAB-2
  • 代码:

    l1 = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    l2 = []
    
    for item in l1:
        #add item to l2 if startswith MYTAB
        if item.startswith('MYTAB'):
            l2.append(item)
    
    #getting index of 'MYTAB-2'
    index = l2.index('MYTAB-2')
    
    #removing MYTAB-B
    del(l2[index])
    
    #printing l2
    l2
    
    输出:

    ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-PERF']
    

    您可以使用这段代码

  • 它将在初始列表
    l1
    中循环,如果项目
    以(“MYTAB”)
    开始,它将被添加到列表
    l2
  • 它将在
    l2
    列表中找到
    MYTAB-2
    的索引
  • 删除
    MYTAB-2
  • 代码:

    l1 = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    l2 = []
    
    for item in l1:
        #add item to l2 if startswith MYTAB
        if item.startswith('MYTAB'):
            l2.append(item)
    
    #getting index of 'MYTAB-2'
    index = l2.index('MYTAB-2')
    
    #removing MYTAB-B
    del(l2[index])
    
    #printing l2
    l2
    
    输出:

    ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-PERF']
    

    尝试使用pyregex查找正则表达式搜索。下面是一个关于你的问题的正则表达式


    在这种情况下,它使用
    MYTAB-[^2]
    作为正则表达式模式。

    尝试使用pyregex查找正则表达式搜索。下面是一个关于你的问题的正则表达式


    在这种情况下,它使用
    MYTAB-[^2]
    作为正则表达式模式。

    在列表上使用带
    re
    的过滤器:

    import re
    
    l = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    l = [i  for i in l if re.match(r'MYTAB-[^2]', i)]
    print(l)
    # ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-PERF']
    

    在列表中使用带有
    re
    的过滤器:

    import re
    
    l = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    l = [i  for i in l if re.match(r'MYTAB-[^2]', i)]
    print(l)
    # ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-PERF']
    
    >>重新导入
    >>>列表\=['MYTAB-EVENTS'、'MYTAB-1'、'MYTAB-2'、'MYTAB-PERF'、'ABC'、'DEF']
    >>>过滤列表=过滤器(lambda str:re.search(r'^MYTAB(?)-2',str_uuu),列表)
    >>>已筛选列表
    ['MYTAB-EVENTS'、'MYTAB-1'、'MYTAB-PERF']
    
    >>导入re
    >>>列表\=['MYTAB-EVENTS'、'MYTAB-1'、'MYTAB-2'、'MYTAB-PERF'、'ABC'、'DEF']
    >>>过滤列表=过滤器(lambda str:re.search(r'^MYTAB(?)-2',str_uuu),列表)
    >>>已筛选列表
    ['MYTAB-EVENTS'、'MYTAB-1'、'MYTAB-PERF']
    
    您有许多用于筛选列表的选项。如果您使用的是与输入开头匹配的
    re.match
    ,则您的问题的基本答案是
    'MYTAB(?!-2)

    import re
    expr = re.compile('MYTAB(?!-2)')
    rawList = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    filteredList = [x for x in rawList if expr.match(x)]
    
    但是,有一种更简单的方法可以做到这一点,因为您正在查看前缀:

    filteredList = [x for x in rawList if x.startswith('MYTAB') and x not x.startswith('MYTAB-2')]
    
    如果出于任何原因您对列表理解不满意,您可能需要使用内置的
    过滤器
    功能:

    filteredList = list(filter(expr.match, rawList))
    
    甚至

    filteredList = list(filter(lambda x: x.startswith('MYTAB') and not x.startswith('MYTAB-2'), rawList))
    
    此外,如果您不希望保留对预编译表达式的引用(例如,为了简洁而牺牲效率),可以使用
    re.match
    而不是
    re.compile.match

    import re
    rawList = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    filteredList = [x for x in rawList if re.match(x)]
    

    您有许多用于筛选列表的选项。如果您使用的是与输入开头匹配的
    re.match
    ,则您的问题的基本答案是
    'MYTAB(?!-2)

    import re
    expr = re.compile('MYTAB(?!-2)')
    rawList = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    filteredList = [x for x in rawList if expr.match(x)]
    
    但是,有一种更简单的方法可以做到这一点,因为您正在查看前缀:

    filteredList = [x for x in rawList if x.startswith('MYTAB') and x not x.startswith('MYTAB-2')]
    
    如果出于任何原因您对列表理解不满意,您可能需要使用内置的
    过滤器
    功能:

    filteredList = list(filter(expr.match, rawList))
    
    甚至

    filteredList = list(filter(lambda x: x.startswith('MYTAB') and not x.startswith('MYTAB-2'), rawList))
    
    此外,如果您不希望保留对预编译表达式的引用(例如,为了简洁而牺牲效率),可以使用
    re.match
    而不是
    re.compile.match

    import re
    rawList = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']
    filteredList = [x for x in rawList if re.match(x)]
    


    问题需要澄清一下:类似于
    MYTAB-23
    的东西有效吗?也就是说,
    MYTAB-2
    是作为一个整数值还是仅仅是一个前缀被禁止?问题需要澄清一下:类似于
    MYTAB-23
    的东西是否有效?也就是说,
    MYTAB-2
    是禁止作为整数值还是仅作为前缀?仅链接回答。请把它的内容贴在这里。链接只提供答案。“请把它的内容贴在这里。”物理学家麦德,我正在展示解决他的问题的另一种方法。这样我们都可以学习。“你真的认为你需要投反对票吗?既然你添加了一些叙述,我非常愿意取消我的反对票。”物理学家Mad,我正在展示另一种解决他的问题的方法。这样我们都可以学习。你真的认为你需要对此投反对票吗?现在你已经添加了一些叙述,我非常愿意删除我的反对票。你可以去掉前面的
    ^
    ,使用
    匹配
    ,而不是
    搜索
    +“我同意你的看法,但我这样做是为了展示更多的正则表达式语法,比如提问者提问。越多越好。”。我看不出OP在哪里要求更复杂的正则表达式。@MadPhysicast“我需要选择所有值,以…它的正则表达式语法应该是什么开头?”对我来说,
    ^
    .match()
    更能说明正则表达式语法。这只是一个细节。不管怎样,我都投了赞成票,因为到目前为止,负向前看是最好的方法。你可以去掉前面的
    ^
    ,使用
    匹配
    ,而不是
    搜索
    +“我同意你的看法,但我这样做是为了展示更多的正则表达式语法,比如提问者提问。越多越好。”。我看不出OP在哪里要求更复杂的正则表达式。@MadPhysicast“我需要选择所有值,以…它的正则表达式语法应该是什么开头?”对我来说,
    ^
    .match()
    更能说明正则表达式语法。这只是一个细节。不管怎样,我都投了赞成票,因为到目前为止,负向前看是最好的方法。
    [^2]+
    加号强制引擎匹配所有非
    2
    的附加字符,因此
    MYTAB-22
    不同于
    MYTAB-2
    它不会匹配。
    [^2]+
    加号强制引擎匹配所有非
    2
    的附加字符,因此
    MYTAB-22
    MYTAB-2不同<