【问题标题】:Regex finding the last occurrence of the highest number after a matching string正则表达式在匹配字符串之后查找最大数字的最后一次出现
【发布时间】:2021-12-30 15:05:57
【问题描述】:

我有以下文本,我想要一个匹配每个文件最后一页的正则表达式: 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.\n\n/g 这个几乎可以工作
  • 谢谢,但我的长文本并没有真正的空行添加它们是为了便于代码阅读
  • 我认为这可行:在每个页面之前选择文件名1。任何人都可以在每页 1 之前选择最后一个“.*_Page.d+”吗? ??????????
  • grep Page1 -B 1
  • /((.*(\n|\r|\r\n)){1}).*Page1/g

标签: regex regex-lookarounds regex-negation


【解决方案1】:

正则表达式

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

如果您需要 .jpg 扩展名来匹配,则如下所示:

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

示例

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

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

说明

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

全局模式标志

  • g 修饰符:全局。所有匹配(第一次匹配后不返回)
  • m 修饰符:多行。导致 ^$ 匹配每行的开始/结束(不仅是字符串的开始/结束)

【讨论】:

  • 非常感谢。当我使用扩展时遇到问题,这个正则表达式不起作用。你能看一下吗:并帮我解决一下:regex101.com/r/HT29tB/1
  • @LordTesla 更新了我的答案,在比赛中加入了一个带有 .jpg 扩展名的示例。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多