首页 > 解决方案 > 正则表达式从文件名中捕获页码

问题描述

我有如下命名的文档页面图像(例如):

“2020-07-24 07;17;09 - ABCD - 12345-67890 (14 Main St) - 01 [声明 1].png”
“2020-07-24 07;17;09 - ABCD - 12345-67890 (14 Main St) - 02 [声明 2].png”
“2020-07-24 07;17;09 - ABCD - 12345-67890 (14 Main St) - 07 [火].png”
“2020-07-24 07;17;09 - ABCD - 12345-67890 (14 Main St) - 12 [Fungi etc].png”</pre>

我只想捕获页码,而不是前面的零(在本例中为 1、2、7、12)。根据我在这里看到的代码,我想也许这样的事情可能会解决它:

- 0*\d+.*\.(?:jpe?g|png|tiff?)$(?!(?:0*)\d+)

……但是,它没有。还有其他建议吗?

标签: regex

解决方案


您可以对数字使用捕获组:

- 0*(\d+) \[[^][]*]\.(?:jpe?g|png|tiff?)\b

解释

  • - 0*匹配-一个空格和 0+ 次一个零
  • (\d+)捕获组 1,匹配 1+ 位
  • [[^][]*]匹配空格和从[直到]
  • \.(?:jpe?g|png|tiff?)\b匹配一个点和一个备选方案

正则表达式演示

要在最后一次出现空格破折号后捕获最后一位不带前导零的数字,您可以使用负前瞻:

 - 0*(\d+)(?!.* - ).*\.(?:jpe?g|png|tiff?)$

正则表达式演示


推荐阅读