2016-08-11 21 views
-2

文字列リスト: 文字列を 'Low'で終わらせるか、 'High'で終了するか '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

スタートを「[正規表現HOWTO](https://docs.python.org/3/howto/regexを読み込むことで。 html) ";代替メタキャラクタ( '|')は、「[More Metacharacters](https://docs.python.org/3/howto/regex.html#more-メタキャラクタ)」の最初のセクションです。必要に応じて、['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

@ヤン:トゥーシェ...編集中に私を見つけました。 –

答えて

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

Hey thanx [Jan](http://stackoverflow.com/users/1231450/jan)私はコードを更新しました。 –

関連する問題