【问题标题】:print item if it does not ends with a given pattern python如果项目不以给定的模式python结尾,则打印项目
【发布时间】:2014-04-30 10:10:06
【问题描述】:

我有一个清单:

mylist = ['summer_C','summer_C1','summer_P','summer_C123','summer_p32']

我想打印所有不以以下模式结尾的项目:

'_C' or '_C%' (int) 

所以它可能是“_C”或“_C1”或“_C2939”之类的东西

我的尝试:

for item in mylist:
    if item[-2:] != '_C' or item[-x:] != '_C(INT)'
        print item

您可以看到它不是很动态,我该如何处理?

【问题讨论】:

    标签: python regex string substring ends-with


    【解决方案1】:

    您可以为此使用正则表达式:

    import re
    
    r = re.compile(r'_C\d+$')
    mylist = ['summer_C','summer_C1','summer_P','summer_C123','summer_p32']
    print [x for x in mylist if not r.search(x)]
    #['summer_C', 'summer_P', 'summer_p32']
    

    正则表达式解释:http://regex101.com/r/wG3zZ2#python

    【讨论】:

    • 抱歉 ash 但我没有提到我也想避免 '_C',这会如何影响您的代码?
    • 末尾的 "_C" 也应排除,因此将 \d+ 更改为 \d*+ 表示 1 个或多个字符,* 从 0 个字符开始。
    • 谢谢大家,这东西真的很有用,要多学习!
    【解决方案2】:

    你会使用正则表达式:

    import re
    
    numeric_tail = re.compile('_C\d*$')
    
    for item in mylist:
        if not numeric_tail.search(item):
            print item
    

    该模式匹配文字文本 _C,后跟 0 个或多个数字,并以 $ 锚定在字符串的末尾。

    演示:

    >>> import re
    >>> numeric_tail = re.compile('_C\d*$')
    >>> mylist = ['summer_C','summer_C1','summer_P','summer_C123','summer_p32']
    >>> for item in mylist:
    ...     if not numeric_tail.search(item):
    ...         print item
    ... 
    summer_P
    summer_p32
    

    【讨论】:

    • 很好,但我认为 OP 想要所有不匹配的内容
    • @JackFrankland:哎呀,错过了一个负数。已更正。
    • 抱歉 Martijn 但我没有提到我也希望避免使用 '_C',这会如何影响您的代码?
    • @Boosted_d16:将+ 更改为*。现在为您完成。
    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2022-11-25
    • 2022-08-13
    相关资源
    最近更新 更多