首页 > 解决方案 > 无法使用带有 re 的数组,搜索功能

问题描述

我正在尝试解决我正在编写的代码遇到的这个问题,我似乎无法找到任何关于它的答案,并且最简单的方法是最耗时的。如果有人可以提供帮助,请感谢所有评论,我会考虑所有评论。

from re import search
x = "forth" #this value can change so don't think its just a set value 
array = ["first", "second", "third", "forth", "fifth"]

if search(array[0][1][2][3][4], x):
    print(x)
else:
    print("error")

这不起作用,我正在考虑的唯一另一种方法是一个一个地做一个巨大的 if 语句,其中包含一个 elif 部分的所有值,但在我这样做之前,我宁愿检查是否有更简单的方法它。

标签: python

解决方案


re.search() 在字符串(不是模式数组)中查找特定模式。

您的array[0][1][2][3][4]符号不代表数组的 5 个元素,它对应于从 5 维矩阵访问元素。

array要检查 in 中是否存在任何单词,x您可以将数组转换为单个模式或使用 any():

pattern = r"\b(" + "|".join(array) + ")\b" # single pattern, of whole words 
if re.search(pattern,x): 
    print(x)
else:
    print("error")

或者

if any(re.search(p,x) for p in array): # if any(p in x for p in array):
    print(x)
else:
    print("error")

请注意,第二种方法不需要 re 模块,并且会在单词中找到子字符串(例如,“stackoverflow”中的“over”),这可能是也可能不是您想要的。

如果它包含任何单词,您的代码当前会打印整个字符串,但如果您的目标是打印找到的单词,则应使用 re.findall():

for word in re.findall(pattern,x):
    print(word)

推荐阅读