2016-08-11 5 views
-2

У меня есть список строк: Как вернуть строки с «Низким» или «Высоким» или начать с «NQ_»?Строка совпадения с несколькими шаблонами регулярным выражением

list=[ 
'ES_Low', 
'NQ_High', 
'NQ_Low', 
'NQ_Close', 
'NQ_Volume', 
'GC_Open', 
'GC_High', 
'GC_Volume'] 

AnswerDesired=[ 
    'ES_Low', 
    'NQ_High', 
    'NQ_Low', 
    'NQ_Close', 
    'NQ_Volume', 
    'GC_High'] 
+1

Начните с чтения «[Regular Expression HOWTO] (https://docs.python.org/3/howto/regex. HTML) "; метасимвол чередования ('|') является первым в разделе «[Больше метасимволов] (https://docs.python.org/3/howto/regex.html#more-metacharacters)». При необходимости обратитесь к документам модуля '' re' '(https://docs.python.org/3/library/re.html#module-re). Или, если вам не нужно беспокоиться о запуске и завершении, проверьте строку ['startswith'] (https://docs.python.org/3/library/stdtypes.html#str.startswith) и [' endswith' ] (https://docs.python.org/3/library/stdtypes.html#str.endswith). –

+1

Здесь нет необходимости в регулярных выражениях. Используйте понимание списка с помощью 'startswith()' и 'endswith()'. – Jan

+1

@Jan: Touche ... Получил меня, пока я редактировал. –

ответ

2

Как сказано в комментариях: на самом деле не нужно для регулярных выражений здесь.

lst=[ 
'ES_Low', 
'NQ_High', 
'NQ_Low', 
'NQ_Close', 
'NQ_Volume', 
'GC_Open', 
'GC_High', 
'GC_Volume'] 

def cleanse(item): 
    if item.endswith('Low') \ 
    or item.endswith('High') \ 
    or item.startswith('NQ_'): 
     return True 

desired = list(filter(cleanse, lst)) 
print(desired) 
# ['ES_Low', 'NQ_High', 'NQ_Low', 'NQ_Close', 'NQ_Volume', 'GC_High'] 

См. Также a demo on ideone.com.


Конечно, то же самое может быть достигнуто с регулярным выражением, а также:

import re 
rx = re.compile(r'(?:^NQ_)|(?:(?:Low|High)$)') 
desired = [item for item in lst if rx.search(item)] 
print(desired) 
# ['ES_Low', 'NQ_High', 'NQ_Low', 'NQ_Close', 'NQ_Volume', 'GC_High'] 
1

Надежда этот код будет сделать это,

import re 
list=['ES_Low','NQ_High','NQ_Low','NQ_Close','NQ_Volume','GC_Open','GC_High','GC_Volume'] 
for i in list: 
    if (re.search("^NQ_|Low$|High$", i)): 
     print i 

Выход:

ES_Low 
NQ_High 
NQ_Low 
NQ_Close 
NQ_Volume 
GC_High 
+0

Вам не нужно '. +' Перед '' ', если вы будете использовать' re.search() '. – Jan

+0

Эй, спасибо [Jan] (http://stackoverflow.com/users/1231450/jan). Я обновил код. –

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