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

时间:2016-06-28 19:15:42

标签: python regex list

我正在尝试使用Python Regex。我有一个如下列表:

['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF','ABC','DEF']

我需要选择以MYTAB开头的所有值,不包括MYTAB-2。 结果应该是:

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

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

6 个答案:

答案 0 :(得分:2)

您可以使用这段代码。

  1. 它将遍历初始列表l1,如果项目startswith("MYTAB"),则会将其添加到列表l2
  2. 它会在MYTAB-2列表
  3. 中找到l2的索引
  4. 删除MYTAB-2
  5. <强>代码:

    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']
    

答案 1 :(得分:1)

在列表理解中使用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']

答案 2 :(得分:1)

>>> import re
>>> list_ = ['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-2', 'MYTAB-PERF', 'ABC', 'DEF']
>>> filtered_list = filter(lambda str_: re.search(r'^MYTAB(?!-2)', str_), list_)
>>> filtered_list
['MYTAB-EVENTS', 'MYTAB-1', 'MYTAB-PERF']

答案 3 :(得分:1)

您可以使用多种方法过滤列表。如果您使用的'MYTAB(?!-2)'与输入的开头相匹配,则问题的基本答案为re.match

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')]

如果由于任何原因你对列表推导不满意,你可能想要使用内置filter函数:

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

答案 4 :(得分:0)

您可以使用正则表达式/MYTAB-[^2]+/。语法[^2]表示除2之外的所有内容。

答案 5 :(得分:0)

尝试使用pyregex查找正则表达式搜索。对于您的问题,这是一个link到正在运行的正则表达式

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