首页 > 解决方案 > 列表中字符串中间的正则表达式(Python)

问题描述

我正在尝试使用正则表达式来匹配字符串中间的模式,其中字符串也在列表中。我可以找到一个或另一个问题的解决方案,但对如何将两者结合起来感到困惑。

首先,我将此解决方案用作模板。我在“cat”和“cow”之后添加了文本,所以它们现在是“cat named bob”和“cow also named bob”。目标是从列表中的这两个字符串中提取单词“named”,并将它们作为列表中的项目返回(例如 ['named', 'named'])。

mylist = ["dog", "cat named bob", "wildcat", "thundercat", "cow also named bob", "hooo"]
r = re.compile('named')
newlist = list(filter(r.search, mylist)) 
print(newlist)

但是,如果我使用 r.search 或 r.findall,我会得到整个字符串,而不仅仅是中间部分。如果我使用 r.match,我不会得到任何结果。我发现了一些关于在字符串中间进行搜索的 Stack Overflow 查询,但它们似乎不适用于在字符串中查找匹配项的解决方案。我尝试了以下代码,但没有成功:

newlist = list(filter(r.match.group(1), mylist)) 

我将如何结合这两个任务并在列表内的字符串中间提取文本?

标签: pythonregexstringlist

解决方案


使用列表理解:

print([m.group() for m in map(r.search, mylist) if m])

这输出:

['named', 'named']

推荐阅读