【问题标题】:Search List using Regular Expression使用正则表达式搜索列表
【发布时间】:2013-11-02 02:52:18
【问题描述】:

我有一个字符串列表。我尝试在该列表中找到与正则表达式模式匹配的所有字符串。

我正在考虑使用 for 循环/列表理解/过滤器来实现。

Similar to this post. (但是,我不太明白那篇文章中的 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']

谁能给我一些关于如何使用列表推导或过滤器来实现我的想法的提示。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    你在找这个吗?

    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']
    

    【讨论】:

    【解决方案2】:

    如果你想要一个简单的列表理解:

    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']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2011-05-20
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多