如何在Python中找到正则表达式的所有匹配项?

如何在Python中找到正则表达式的所有匹配项?,python,regex,search,Python,Regex,Search,在我正在编写的程序中,我让Python使用re.search()函数在文本块中查找匹配项并打印结果。但是,一旦程序在文本块中找到第一个匹配项,它就会退出 如果程序在找到所有匹配项后才停止,如何重复执行此操作?是否有单独的函数来执行此操作?使用re.findall或re.finditer 返回匹配字符串的列表 返回对象上的迭代器 示例: re.findall( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumbe

在我正在编写的程序中,我让Python使用
re.search()
函数在文本块中查找匹配项并打印结果。但是,一旦程序在文本块中找到第一个匹配项,它就会退出


如果程序在找到所有匹配项后才停止,如何重复执行此操作?是否有单独的函数来执行此操作?

使用
re.findall
re.finditer

返回匹配字符串的列表

返回对象上的迭代器

示例:

re.findall( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')
# Output: ['cats', 'dogs']

[x.group() for x in re.finditer( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')]
# Output: ['all cats are', 'all dogs are']

你是另一头野兽。你想重复搜索。
finditer
是我要找的。我很惊讶其中一个返回匹配对象和其他字符串。我希望使用
match\u all
match\u iter
功能。免责声明:这些功能将只找到不重叠的matches@AntoineLizée,如何找到重叠的迭代?@Raksha-在循环中使用
re.search
。它将返回一个
Match
对象。您需要传入
Match.start()+1
作为
re.search
循环下一次迭代的
pos
参数。如果匹配包含多个组,
findall
将返回匹配元组的列表,而不是匹配字符串的列表。