正则表达式字符串列表中的字符串搜索列表

时间:2018-06-12 20:40:17

标签: python regex list

我有一个列表,其中包含我希望在另一个列表中查找的单词:

listex = ['cat', 'mouse', 'dog']

另一个列表是我希望使用上面列表中的相应单词搜索的:

listsearch = ['Hi there is a rabbit', 'how many dogs?', 'hot weather']

我的想法是在' listex'中为每个单词使用正则表达式。在' listsearch'中的每个字符串上。我的目标是在' listsearch'中获取字符串的索引。已匹配。现在,我尝试了以下内容:

for search in listsearch:
  x = search
  if re.search(r"(?=("+'|'.join(listex)+r"))",x) is not None:
    a = re.search(r"(?=("+'|'.join(listex)+r"))",x)
    a=a.group(1)
    print(a)

dog

所以我现在的代码给我的是输出" dog"。但我希望得到的是" listsearch"中匹配的索引。 - 即在上面的例子中,我希望获得索引1,因为这是" listsearch"中的索引。包含单词" dog"

关于如何在案件中获取索引的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以使代码更简单:

results = [re.search('|'.join(listex),l) for l in listsearch]
#[None, <_sre.SRE_Match object; span=(9, 12), match='dog'>, None]
indexes = [i for i,v in enumerate(results) if v]
#[1]

答案 1 :(得分:0)

对于一个基本问题,“列表理解”是否真的应该参与答案?我的意思是,我认为有人可能想告诉他这里没有必要使用正则表达式,但是如果我们想要使用它,也许更基本的东西就足够了。

import re

listex = ['cat', 'mouse', 'dog']
listsearch = ['Hi there is a rabbit', 'how many dogs?', 'hot weather']

for i in range(len(listex)):
    for ii in range(len(listsearch)):
            if re.findall(listex[i], listsearch[ii]):
                    print(str(ii)+': '+listex[i])

输出:

1: dog

说明:

  • 我故意使用i和ii,因此您可以更直接地捕获每个数组的索引号
  • 我说的是侦听数组的每个索引/元素,也遍历每个元素listsearch数组,并使用正则表达式查找我们正在搜索的单个短语中在侦听器中搜索的单个术语的任何出现在listsearch中
  • 如果正则表达式测试成功(即如果它返回空白数组([])以外的其他内容,则在listsearch中打印索引号并在找到的listex中打印该术语
  • 不可否认,这不是最直接的解释,而是通过代码添加类似“我有一只鼠标”到listsearch数组并查看输出