您有许多用于过滤列表的选项。如果您使用的是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')]
如果您因任何原因对列表推导不满意,您可能需要使用内置的 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)]