2015-04-17 2 views
4

Поэтому у меня есть этот список строк:Найти конкретный шаблон (регулярное выражение) в виде списка строк (Python)

teststr = ['1 FirstString', '2x Sec String', '3rd String', 'x forString', '5X fifth'] 

Что мне нужно сделать, чтобы получить все элементы из этого списка, содержат:

number + "x" 

или

number + "X" 

Например, если у меня есть функция

def SomeFunc(string): 
    #do something 

Я хотел бы получить такой вывод:

2x Sec String 
5X fifth 

я нашел где-то здесь, в StackOverflow эту функцию:

def CheckIfContainsNumber(inputString): 
    return any(char.isdigit() for char in inputString) 

Но это возвращает каждую строку, которая имеет номер.

Как я могу расширить функции для получения желаемого результата?

ответ

6

Использование re.search функция наряду со списком осмысления.

>>> teststr = ['1 FirstString', '2x Sec String', '3rd String', 'x forString', '5X fifth'] 
>>> [i for i in teststr if re.search(r'\d+[xX]', i) ] 
['2x Sec String', '5X fifth'] 

\d+ соответствует одной или нескольким цифрам. [xX] соответствует верхнему и нижнему регистру x.

Определив его как отдельную функцию.

>>> def SomeFunc(s): 
     return [i for i in s if re.search(r'\d+[xX]', i)] 

>>> print(SomeFunc(['1 FirstString', '2x Sec String', '3rd String', 'x forString', '5X fifth'])) 
['2x Sec String', '5X fifth'] 
+1

совершенный, работал как очарование! thnx :) – falco

Смежные вопросы