如何从python列表中排除一个单词?
我正在尝试使用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
['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不同<