【发布时间】:2011-06-09 12:46:46
【问题描述】:
在我正在编写的程序中,我让 Python 使用 re.search() 函数在文本块中查找匹配项并打印结果。但是,一旦在文本块中找到第一个匹配项,程序就会退出。
在找到所有匹配项之前程序不会停止的情况下,我该如何重复执行此操作?是否有单独的函数来执行此操作?
【问题讨论】:
-
Recursive REs 是不同的野兽。您想重复搜索。
在我正在编写的程序中,我让 Python 使用 re.search() 函数在文本块中查找匹配项并打印结果。但是,一旦在文本块中找到第一个匹配项,程序就会退出。
在找到所有匹配项之前程序不会停止的情况下,我该如何重复执行此操作?是否有单独的函数来执行此操作?
【问题讨论】:
请改用re.findall 或re.finditer。
re.findall(pattern, string) 返回匹配字符串的列表。
re.finditer(pattern, string) 在MatchObject 对象上返回一个迭代器。
示例:
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 对象和其他字符串。我期待使用match_all 或match_iter 函数。
re.search。它将返回一个 Match 对象。您需要将Match.start() + 1 作为pos 参数传递给re.search,以进行下一次循环迭代。
findall 将返回匹配元组列表,而不是匹配字符串列表。