【发布时间】:2018-12-26 03:26:39
【问题描述】:
我正在尝试使用正则表达式来匹配字符串中间的模式,其中字符串也在列表中。我可以找到一个问题或另一个问题的解决方案,但对如何将两者结合起来感到困惑。
首先,我使用this solution 作为模板。我在“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,我不会得到任何结果。我在searching in the middle of a string 上发现了一些 Stack Overflow 查询,但它们似乎不适用于在字符串中查找匹配项的解决方案。我尝试了以下代码,但没有成功:
newlist = list(filter(r.match.group(1), mylist))
如何结合这两个任务并在列表内的字符串中间提取文本?
【问题讨论】:
-
尝试使用
r = re.compile(r'\w+\s+(\w+)\s+\w+')。您的结果将在group(1) -
使用
filter(r.search, mylist),您只会收到所有匹配正则表达式的项目。你想要newlist = [r.search(x).group() for x in mylist if r.search(x)] -
@WiktorStribiżew 效果很好。谢谢!