【问题标题】:Python: get list indexes using regular expression?Python:使用正则表达式获取列表索引?
【发布时间】:2010-11-10 15:26:02
【问题描述】:

在 Python 中,如何使用模糊匹配(使用list.index)获取列表中某个项目的位置?

例如,如何获取以下列表中所有*berry形式的水果的索引?

fruit_list = ['raspberry', 'apple', 'strawberry']
# Is it possible to do something like the following?
berry_fruit_at_positions = fruit_list.index('*berry') 

有人有什么想法吗?

【问题讨论】:

  • 这不是正则表达式。
  • 正则表达式也不模糊。恰恰相反,实际上:它们非常严格和精确。

标签: python


【解决方案1】:

使用正则表达式:

import re
fruit_list = ['raspberry', 'apple', 'strawberry']
berry_idx = [i for i, item in enumerate(fruit_list) if re.search('berry$', item)]

并且没有正则表达式:

fruit_list = ['raspberry', 'apple', 'strawberry']
berry_idx = [i for i, item in enumerate(fruit_list) if item.endswith('berry')]

【讨论】:

  • 这个答案应该已经被选为答案了。
  • 我仍然觉得奇怪的是,这是在 python 中执行此相当常见操作的最简单方法。在 R 中,它只是 grep('berry$', berry_idx)。有没有实现更简洁的方法来搜索和获取整数位置的模块?
【解决方案2】:

试试:

fruit_list = ['raspberry', 'apple', 'strawberry']
[ i for i, word in enumerate(fruit_list) if word.endswith('berry') ]

返回:

[0, 2]

根据您的匹配需求将endswith替换为不同的逻辑。

【讨论】:

    【解决方案3】:

    有一个功能:

    import re
    fruit_list = ['raspberry', 'apple', 'strawberry']
    def grep(yourlist, yourstring):
        ide = [i for i, item in enumerate(yourlist) if re.search(yourstring, item)]
        return ide
    
    grep(fruit_list, "berry$")
    

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多