Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字符串列表中字符串的正则表达式搜索列表_Python_Regex_List - Fatal编程技术网

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

Python 字符串列表中字符串的正则表达式搜索列表,python,regex,list,Python,Regex,List,我有一个列表,其中包含我希望在另一个列表中查找的单词: listex = ['cat', 'mouse', 'dog'] 另一个列表是我想用上面列表中的相应单词搜索的列表: listsearch = ['Hi there is a rabbit', 'how many dogs?', 'hot weather'] 我的想法是对“listsearch”中每个字符串上的“ListX”中的每个单词使用正则表达式。我的目标是获取“listsearch”中已匹配字符串的索引。目前,我尝试了以下方法:

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

listex = ['cat', 'mouse', 'dog']
另一个列表是我想用上面列表中的相应单词搜索的列表:

listsearch = ['Hi there is a rabbit', 'how many dogs?', 'hot weather']
我的想法是对“listsearch”中每个字符串上的“ListX”中的每个单词使用正则表达式。我的目标是获取“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”的索引


关于如何在这种情况下获取索引,您有什么想法吗?

您可以使代码更简单:

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]
results=[listsearch中l的重新搜索('|'.join(listex),l)]
#[没有,没有]
索引=[i表示i,v表示枚举(结果)中的i,如果v]
#[1]

对于一个基本问题,答案中是否应该包含“列表理解”?我的意思是,我在想可能有人想告诉他这里根本不需要正则表达式,但如果我们想使用它,也许一些更基本的东西就足够了

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,这样您可以更直接地捕获每个数组的索引号
  • 我是说,对于listex数组的每个索引/元素,也要迭代每个元素listsearch数组,并使用regex在listsearch中搜索的各个短语中查找我们在listex中搜索的各个术语的任何出现
  • 如果正则表达式测试成功(即如果它返回的不是空数组([]),则在listsearch中打印索引号,并在ListX中打印找到的术语)
  • 诚然,这并不是最直接的解释,但可以通过在listsearch数组中添加类似“我有一个鼠标”的代码来进行操作,并查看输出

对于i,在enumerate(listsearch)
中搜索,打印
i
,而不是
a
。是的,可以使用enumerate,但最后使用更复杂的打印语句。它甚至提供了一个更复杂的方法来隔离所需的值。