0

文字列のリストがあります。そして、そのリスト内で正規表現パターンに一致するすべての文字列を見つけようとします。

ループ/リスト内包表記/フィルターを実装するために使用することを考えています。

この投稿に似ています。 (ただし、その投稿のr.matchが何であるかがよくわからないので、別のスレッドを開始しました。)

import re
word_list = ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
# start with letter C/D and then follow by digit
pattern = re.compile('^[CD]\d.*')
result_list = []
for word in word_list:
    try:
        result_list.append(re.findall(pattern, word)[0])    
    except:
        pass

print word_list
print result_list

# OUTPUT >>
['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
['C3S3', 'D4D4']

リスト内包表記またはフィルターを使用して私のアイデアを実装する方法のヒントを教えてください。

4

2 に答える 2

2

これを探していますか?

In [1]: import re

In [2]: l = ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']

In [3]: l2=filter(lambda x:re.match(r'^[CD]\d.*',x), l)

In [4]: l
Out[4]: ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']

In [5]: l2
Out[5]: ['C3S3', 'D4D4']
于 2013-10-29T17:16:53.123 に答える
1

単純なリスト内包表記が必要な場合:

import re
word_list = ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
pattern = re.compile(r'^[CD]\d') # don't need the .* to just search for pattern

result_list = [x for x in word_list if re.search(pattern,x)]

出力:

['C3S3', 'D4D4']
于 2013-10-29T17:25:21.410 に答える