如果项目不以给定模式结尾,则打印它 python

2 投票
2 回答
1753 浏览
提问于 2025-04-18 04:52

我有一个列表:

mylist = ['summer_C','summer_C1','summer_P','summer_C123','summer_p32']

我想打印出所有不以以下模式结尾的项目:

'_C' or '_C%' (int) 

所以可能是像 '_C'、'_C1' 或 '_C2939' 这样的东西

我尝试过的方法:

for item in mylist:
    if item[-2:] != '_C' or item[-x:] != '_C(INT)'
        print item

如你所见,这个方法不是很灵活,我该怎么做呢?

2 个回答

2

你可以使用正则表达式来解决这个问题:

import re

r = re.compile(r'_C\d+$')
mylist = ['summer_C','summer_C1','summer_P','summer_C123','summer_p32']
print [x for x in mylist if not r.search(x)]
#['summer_C', 'summer_P', 'summer_p32']

正则表达式的解释:http://regex101.com/r/wG3zZ2#python

0

你可以使用一个正则表达式:

import re

numeric_tail = re.compile('_C\d*$')

for item in mylist:
    if not numeric_tail.search(item):
        print item

这个模式会匹配字面意思上的 _C,后面可以跟着0个或多个数字,并且这个匹配是在字符串的末尾进行的,用 $ 来表示。

示例:

>>> import re
>>> numeric_tail = re.compile('_C\d*$')
>>> mylist = ['summer_C','summer_C1','summer_P','summer_C123','summer_p32']
>>> for item in mylist:
...     if not numeric_tail.search(item):
...         print item
... 
summer_P
summer_p32

撰写回答