正则表达式查找匹配字符串后最后一次出现的最高数字
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]* )
我有以下文本,我想要一个匹配每个文件最后一页的正则表达式: 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]* )