在Python中,如何在字符串上循环遍历正则表达式的所有匹配?

ziz*_*ler 7 python for-loop while-loop

我希望通过匹配较长字符串中的模式的子字符串来做某事(不仅仅是替换).如果赋值是一个返回值的表达式,就像在C和大多数其他编程语言中一样,那就是(使用C语法和Python语义):

  while ( match = re.search( pat, str ) ) {
       /* do something to the string, using the match object,
          in addition to removing or replacing the substring
       */
    }
Run Code Online (Sandbox Code Playgroud)

或者更详细地说,避免使用赋值作为表达式:

for ( match = re.search( pat, str );
      match;
      match = re.search( pat, str ) ) {
   /* do something to the string, using the match object */
}
Run Code Online (Sandbox Code Playgroud)

在大多数编程语言中,至少有一种是可能的:C,C++,Java,Perl,Javascript,......但它们似乎都不可能在Python中使用.是否存在pythonic等价物(不涉及带有中断或继续声明的kludgey混乱)?

Sin*_*nür 5

您可能正在寻找finditer

返回迭代器,该迭代器在字符串RE模式的所有非重叠匹配上产生匹配对象。从左到右扫描该字符串,并以找到的顺序返回匹配项。空匹配项将包括在结果中,除非它们碰到另一个匹配项的开头。

#!/usr/bin/env python3

import re

s = "abcabcabc";
it = re.finditer("(\w)", s)
for m in it:
    print(m.groups())
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env python3

import re

s = "abcabcabc";
it = re.finditer("(\w)", s)
for m in it:
    print(m.groups())
Run Code Online (Sandbox Code Playgroud)