匹配字符串末尾的模式?

时间:2015-01-19 18:34:37

标签: python regex

想象一下,我有以下字符串:

['a','b','c_L1', 'c_L2', 'c_L3', 'd', 'e', 'e_L1', 'e_L2']

" c"字符串有重要的子类别(L1,L2,L3)。这些表示我们的目的的特殊数据,这些数据是在基于预先指定的字符串" L"的程序中生成的。换句话说,我知道特殊条目应该具有以下形式:

name_Lnumber

知道我正在寻找这种模式,而且我正在使用" L"或更具体地说" _L"作为我对这些对象的指定,我如何返回满足此条件的条目列表?在这种情况下:

['c', 'e']

2 个答案:

答案 0 :(得分:4)

使用简单的过滤器:

>>> l = ['a','b','c_L1', 'c_L2', 'c_L3', 'd', 'e', 'e_L1', 'e_L2']

>>> filter(lambda x: "_L" in x, l)
['c_L1', 'c_L2', 'c_L3', 'e_L1', 'e_L2']

或者,使用列表理解

>>> [s for s in l if "_L" in s]
['c_L1', 'c_L2', 'c_L3', 'e_L1', 'e_L2']

由于您只需要前缀,您可以将其拆分:

>>> set(s.split("_")[0] for s in l if "_L" in s)
set(['c', 'e'])

答案 1 :(得分:3)

您可以使用以下列表理解:

>>> set(i.split('_')[0] for i in l if '_L' in i)
set(['c', 'e'])

或者,如果您想匹配以_L(digit)结尾而不是_Lm之类的元素,则可以使用正则表达式:

>>> import re
>>> set(i.split('_')[0] for i in l if re.match(r'.*?_L\d$',i))
set(['c', 'e'])