您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python re.finditer match.groups()不包含match中的所有组

Python re.finditer match.groups()不包含match中的所有组

这是您的正则表达式:

(AAA\r\n)(ABC[0-9]\r\n){1,}

正则表达式可视化

Debuggex演示

您的目标是捕获紧随其后的 所有 。如您在此Debuggex演示中所见,所有s确实都被匹配了(它们以黄色突出显示)。但是,由于只有“正在重复的内容”部分ABC#``AAA``ABC#

ABC[0-9]\r\n

被捕获(在括号内)及其量词,

{1,}

未被捕获,因此将导致 除最后一场 比赛 之外的 所有比赛 被丢弃。要获取它们,还必须捕获量词:

AAA\r\n((?:ABC[0-9]\r\n){1,})

正则表达式可视化

Debuggex演示

我已将“正在重复的内容”部分(ABC[0-9]\r\n)放入一个非捕获组。(AAA由于您似乎不需要它,我也已停止捕获它。)

捕获的文本可以在换行符上进行拆分,并根据需要提供所有内容

(请注意,\n它本身在Debuggex中不起作用。它需要\r\n

这是一种解决方法。没有太多的正则表达式功能可以通过重复捕获(哪些捕获?)进行迭代。一种更普通的方法是遍历并 处理 找到的每个匹配项。这是来自Java的示例:

   import java.util.regex.*;

public class RepeatingCaptureGroupsDemo {
   public static void main(String[] args) {
      String input = "I have a cat, but I like my dog better.";

      Pattern p = Pattern.compile("(mouse|cat|dog|wolf|bear|human)");
      Matcher m = p.matcher(input);

      while (m.find()) {
         System.out.println(m.group());
      }
   }
}

输出

cat
dog

(摘自 http://ocpsoft.org/opensource/guide-to-regular-expressions-in-java- part-1/,大约减少了1/4)

python 2022/1/1 18:28:45 有206人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶