【问题标题】:How to return all items from a list that dont start with a digit?如何从不以数字开头的列表中返回所有项目?
【发布时间】:2018-11-06 19:33:11
【问题描述】:

我有一个包含单词和数字的列表。让我们说:

list1 = ['1','100', 'Stack', 'over','flow']

我想从这个列表中过滤所有数字并保留单词。我已经导入了re,找到了它的re代码,即:

[^0-9] 

但是,我不确定如何实现这一点,以便获得如下列表。

result = ['Stack', 'over', 'flow']

【问题讨论】:

标签: python regex list


【解决方案1】:

无需正则表达式,使用isdigit()

list1 = ['1','100', 'Stack', 'over','flow']
print([i for i in list1 if not i.isdigit()])

返回:

['Stack', 'over', 'flow']

【讨论】:

    【解决方案2】:

    使用list-comprehension和字符串方法isdigit

    [elem for elem in list1 if not elem.isdigit()]
    

    【讨论】:

      【解决方案3】:

      您可以通过列表理解很好地做到这一点:

      list1 = ['1','100', 'Stack', 'over','flow']
      list2 = [i for i in list1 if not i.isdigit()]
      

      如果出于某种原因,您确实想使用正则表达式来执行此操作(也许您有更复杂的过滤条件),您可以使用以下方法:

      import re
      
      list1 = ['1','100', 'Stack', 'over','flow']
      list2 = [i for i in list1 if re.fullmatch('[^0-9]+', i)]
      

      【讨论】:

        【解决方案4】:

        使用filter + lambda

        list(filter(lambda x: not x.isdigit(), list1))
        # ['Stack', 'over', 'flow']
        

        【讨论】:

          【解决方案5】:

          与建议的其他答案一样,您实际上并不需要正则表达式,但如果您的需求在未来发生变化,它们会更加灵活。例如。

          from re import match
          list1 = ['1','100', 'Stack', 'over','flow']
          result = list(filter(lambda el: match(r'^[^0-9]*$', el), list1))
          
          • ^: 字符串开头
          • [...]:字符组
          • ^:否定字符组
          • 0-9:数字 0-9(你也可以使用 \d
          • *: 零次或多次
          • $: 字符串结束

          如果您想要所有不以数字开头的元素,请使用^[^0-9].*,其中. 是任意字符。

          【讨论】:

          • 这就是我要找的;非常感谢!
          【解决方案6】:

          我不知道您的列表元素的确切模式,但这段代码应该适用于给定的示例

          import re
          
          pattern = re.compile("([A-Za-z])")
          
          list1 = ['1','100', 'Stack', 'over','flow']
          result = []
          
          for x in list1: 
              check = pattern.match(x)
              if check is not None:
                  result.append(x)
          print (result)
          

          【讨论】:

            【解决方案7】:
            #python 3
            olist = list(filter(lambda s: s.isalpha() , list1))
            <br>print(olist) # ['Stack', 'over', 'flow']
            
            #python2
            olist = filter(lambda s:s.isalpha(), list1) 
            <br>print olist # ['Stack', 'over', 'flow']
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-11-02
              • 2022-01-15
              • 2012-03-19
              • 2013-04-12
              • 1970-01-01
              相关资源
              最近更新 更多