【问题标题】:Regex for matching/extracting part of filename用于匹配/提取部分文件名的正则表达式
【发布时间】:2021-07-21 04:34:51
【问题描述】:

以下正则表达式

var re = /(?<=_)\d*/g

从遵循类似 filename_bitrate.ext 命名约定的文件名中提取比特率

它适用于大多数文件名 -

asdfasd_400.mp4
asdfasd_600.mp3
asdfasd_1000.mxf

有些文件遵循相同的约定,但我的正则表达式无法解析它们。前 -

BLIVE_CEOFoC_210720_1245_400.mp4

我想基本上提取 .ext 之前的数字。如何修改我的正则表达式以使用任何文件名?

【问题讨论】:

  • 这需要使用正则表达式吗?如果您可以使用 split ,它的可读性更高且同样有效
  • 这是一种非常不可靠的获取比特率的方法。您可能想查看ffmpeg,示例herehere

标签: regex


【解决方案1】:

你可以使用

(?<=_)\d+(?=\.\w+$)
(?<=_)\d+(?=\.[^.]+$)

请参阅regex demo详情

  • (?&lt;=_) - 一个积极的后视,匹配紧接在 _ 之前的位置
  • \d+ - 一位或多位数字
  • (?=\.\w+$) - 一个正向的前瞻,它匹配一个紧跟一个点和一个或多个单词字符直到字符串结尾的位置。如果您使用带有[^.]+ 的第二个版本,它将匹配除点之外的任何一个或多个字符(因此,允许扩展名中的任何字符)。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多