【问题标题】:How to exclude file extension from string with regex如何使用正则表达式从字符串中排除文件扩展名
【发布时间】:2018-02-06 14:56:24
【问题描述】:

我希望能够从正则表达式中获取两个匹配组并排除第三个。 这是我要匹配的字符串示例:

my-file-name-0.44.0.6-SOME-SNAPSHOT.zip

我想要两个匹配组,一个用于不带版本的文件名,另一个用于不带文件扩展名的版本。

  • 第 1 组:我的文件名
  • 第 2 组:0.44.0.6-SOME-SNAPSHOT
  • 排除:.zip

文件名可以是随机的,但版本前总会有一个连字符,那么文件扩展名也可以是随机的。

这是我想出的,但无法弄清楚排除部分。

(.*?)-([0-9.]{1,4}.*)

【问题讨论】:

  • ([\w-]+)-([\d.]+[\w-]+)(\.\w+)?
  • ^(.*?)-([0-9.]{1,4}.*)(\..+?)$
  • 您的示例有 3 个组,只需要第 2 个组,这可行吗? (.*?)-(\d.+.*)\..+?$
  • 您描述的规则不足以唯一标识文件名和版本。 my 作为文件名和file-name-0.44.0.6-SOME-SNAPSHOT 作为版本匹配规则。 (my-filename-0.44) 或 (my-file-name0.44) 也是如此。
  • 文件名总是有两部分由“-”分隔,后跟文件扩展名。这将用于我可以定义正则表达式的工具中,因此无法通过使用代码来完成。

标签: regex


【解决方案1】:

\. 附加到您的正则表达式:

(.*?)-([0-9.]{1,4}.*)\.

不过你可能想稍微修改一下:

(.*?)-(\d.*)\.\w+

Live demo

【讨论】:

    【解决方案2】:

    使用此正则表达式删除文件扩展名

    /(.*)\.[^.]+$/
    

    【讨论】:

    • 这只给了我一组包含版本部分的整个文件名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2010-12-21
    • 2021-09-07
    相关资源
    最近更新 更多