Regex 使用相同的捕获组在两个匹配之间查找匹配

Regex 使用相同的捕获组在两个匹配之间查找匹配,regex,regex-group,Regex,Regex Group,我做regex已经很多年了,但显然我以前从未遇到过这个问题,我不知道如何解决它 这里有一个基本的正则表达式来说明问题的症结所在- (\d)(.*)(\d) 如果我有这根绳子- aaa4bbb5ccc6ddd7eee 我从中得到了两个匹配项(在这里演示)- 4 bbb 5和捕获组4,bbb,5 6 ddd 7和捕获组6,ddd,7 但是,在使用第一个匹配中的最后一个捕获组和最后一个匹配中的第一个捕获组的两个匹配之间应该有第三个匹配 5 ccc 6和捕获组5,ccc,6 有人知道如何解决这个问题

我做regex已经很多年了,但显然我以前从未遇到过这个问题,我不知道如何解决它

这里有一个基本的正则表达式来说明问题的症结所在-

(\d)(.*)(\d)

如果我有这根绳子-

aaa4bbb5ccc6ddd7eee

我从中得到了两个匹配项(在这里演示)-

  • 4 bbb 5
    和捕获组
    4,bbb,5
  • 6 ddd 7
    和捕获组
    6,ddd,7
  • 但是,在使用第一个匹配中的最后一个捕获组和最后一个匹配中的第一个捕获组的两个匹配之间应该有第三个匹配

    • 5 ccc 6
      和捕获组
      5,ccc,6
    有人知道如何解决这个问题吗


    谢谢

    基本上,您需要使用“向前看”,这样您的匹配就不会超过希望下一个匹配开始时使用的所需值

    (\d)(.*?)(?=(\d))
    
    您还可以将其更改为搜索非数值,而不是使用惰性搜索

    (\d)(\D*)(?=(\d))
    

    这是给那些认为这是错误的人的建议。

    Java、c#和python?请选择一种语言,如果它应该是语言不可知论在这种特殊情况下,我不在乎它用什么语言回答-这是一个理论问题,我用4-5种语言工作daily@Nefariis在这种情况下,只需正则表达式标记即可。我帮你修好了。此外,您还需要向前看和向后看。每种语言都有自己的Regex实现,这很重要。这是关于如何进行Regex匹配的问题。当您前进到5并且找到匹配项后,您就不会返回。或者
    (\d)([^\d]+)(?=(\d))
    哪一个更有效。@不可忍受的亮度使其工作的重要部分是向前看。其他任何东西都只是一个建议。当然,我的只是一个建议。@UnderrableLightness实际使用
    \D
    会更有意义,就像你链接的傻瓜一样。它们有完全相同的含义。