通过正则表达式将字符串与多个模式匹配

时间:2016-08-11 06:03:52

标签: python regex

我有一个字符串列表: 如何返回字符串以'低'结尾或以'高'结尾或以'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']

2 个答案:

答案 0 :(得分: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 :(得分: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