如何在列表上使用re.search?

时间:2019-12-01 10:48:03

标签: regex python-3.x

我试图将re.search更改为re.match,以此类推。但是无论我输入什么,它仍然会显示“ No match result”。 我认为代码中可能存在问题,因为我在编写代码时没有完全理解其背后的概念。 基本上,如果给定一个单词并且匹配名称中的单词之一,我将尝试做一个“搜索引擎”来查找所有匹配的名称。有人可以告诉我怎么了吗?

import re
searchlist=[ *insert name here* ]

word_s = input("Search : ")

search_list = re.compile(r'\b(?:%s)\b' % '|'.join(searchlist), re.I|re.M)

result = re.search(search_list, word_s)

if result:
    print("Match Result: ", result.group())
else:
    print("No match result.")

1 个答案:

答案 0 :(得分:0)

您最近的评论显示了问题:

在您的代码中,searchlist是搜索项(正则表达式要搜索的内容)的列表,不是要搜索的字符串的列表

例如:

searchlist = ["Fundamentals", "Engineering"]
search_list = re.compile(r'\b(?:%s)\b' % '|'.join(searchlist), re.I|re.M)

现在search_list\b(?:Fundamentals|Engineering)\b,因此它可以用作正则表达式来查找是否其中任何一项出现在word_s

result = re.search(search_list, word_s)

您想做相反的事情:

books = ["Fundamentals of Organic Chemistry, International Edition", "Engineering Mechanics: Statics In SI Units"]
word_s = input("Search for: ")
word_re = re.compile(r"\b{}\b".format(word_s), re.I)
for book in books:
    if re.search(word_re, book):
        print("First Match Result: ", book)
        break # Abort search after first match
else:         # Only executed if the for loop was exhausted
    print("No match result.")