Напечатать элемент, если он не заканчивается данным шаблоном python

У меня есть список:

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 ответа

Решение

Вы бы использовали регулярное выражение:

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

Вы можете использовать регулярные выражения для этого:

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

Объяснение Regex: http://regex101.com/r/wG3zZ2

Другие вопросы по тегам