我正试图解决这个问题,我正在编写的代码,我似乎无法找到关于它的任何答案,这样做最简单的方法是最耗时的。如果有人能帮忙,请做所有的评论都是感激的,我会考虑所有的。
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部分,但在我这样做之前,我宁愿检查是否有更简单的方法。
re.search()在字符串(不是模式数组)中查找特定的模式。
你的array[0][1][2][3][4]
符号不代表数组的5个元素,它对应于从5维矩阵中访问一个元素。
要检查array
中的任何单词是否存在于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模块,并且可以在单词中找到子字符串(例如"over")在"stackoverflow")中,可能是也可能不是您想要的。
你的代码当前打印整个字符串,如果它包含任何单词,但如果你的目标是打印找到的单词,你应该使用re.findall():
for word in re.findall(pattern,x):
print(word)
我发现匹配对列表更好…尤其是大列表。
import re
thisCheck = re.compile(r'.+th$', re.IGNORECASE)
array = ["first", "second", "third", "fourth", "fifth"]
for x in list(filter(thisCheck.match, array):
print(x)
输出:
fourth
fifth