正则表达式查找匹配字符串后最后一次出现的最高数字

Regex finding the last occurrence of the highest number after a matching string

我有以下文本,我想要一个匹配每个文件最后一页的正则表达式: https://regex101.com/r/DmVnK7/1

正确的正则表达式给出以下结果:

A_File1_Page1
**A_File1_Page2**

A_File2_Page1
A_File2_Page2
**A_File2_Page3**

B_File1_Page1
B_File1_Page2
**B_File1_Page3**

B_File2_Page1
B_File2_Page2
B_File2_Page3
**B_File2_Page4**

C_File1_Page1
C_File1_Page2
C_File1_Page3
C_File1_Page4
**C_File1_Page5**

正则表达式

/(^.*_Page)\d+$(?!\r?\n\d+$)/gm

如果您需要 .jpg 匹配的扩展,或者如下所示:

/(^.*_Page)\d+\.jpg$(?!\r?\n\d+\.jpg$)/gm

例子

https://regex101.com/r/Q2Ymk2/1

或使用 .jpg 扩展名: https://regex101.com/r/Z0MSHJ/1

描述

  • 第 1 个捕获组 (^.*_Page)
    • ^ 断言行首的位置
    • . 匹配任何字符(行终止符除外)
    • *匹配前一个token,次数在零到无限次之间,尽可能多,按需回馈(贪心)
    • _Page 按字面匹配字符 _Page(区分大小写)
  • \d匹配一个数字(相当于[0-9]
  • +匹配前一个token,次数在1次到无限次之间,尽可能多次,按需回馈(贪心)
  • $ 声明行尾的位置
  • 负前瞻(?!\r?\n\d+$)
    • 断言下面的正则表达式不匹配
    • \r 匹配回车 return (ASCII 13)
      • ?匹配前一个token 0到1次之间,尽可能多的,按需回馈(贪心)
    • \n 匹配换行(换行)字符 (ASCII 10)
    • </code> 匹配与第一个捕获组最近匹配的相同文本</li> <li><code>\d匹配一个数字(相当于[0-9]
    • +匹配前一个token,次数在1次到无限次之间,尽可能多次,按需回馈(贪心)
    • $ 声明行尾的位置

全局模式标志

  • g修饰符:全局。所有比赛(第一场比赛后不return)
  • m修饰符:多行。导致 ^$ 匹配每一行的 begin/end(不仅是字符串的 begin/end)

使用正则表达式,我认为只能收集最后一次出现的内容。
主要是因为没有用于计数的正则表达式结构。
如果您需要计数,匹配所有页面 (.*?Page\d+) 然后排序和唯一。

如果只获取每个的最后一页就足够了,那么这个

(.*?Page)\d+(?![\s\S]*)

https://regex101.com/r/iP3FcV/1

 ( .*? Page )                  # (1)
 \d+ 
 (?! [\s\S]*  )