regex - Powershell重命名文件删除从正则表达式子字符串开始的部分

标签 regex powershell

我很难编写一个 ps 代码来重命名一堆 excel 文件,从而切断用户可能留下的尾部。
简单替换不会做的事情:

-replace " ([vV]{1}\d{1}\.\d{1})",""

所以我还有一堆东西。

文件名是:
SomeNameSomeNameSome v1.3 written by Paul.xls

AnotherName-Another-V5.6 addendum Quarter3.xls

YetAnother.Another V3.73 updated.xls

都需要转换为:
SomeNameSomeNameSome.xls

AnotherName-Another.xls

YetAnother.Another.xls

所以有人可以帮助合并这个正则表达式([vV]{1}\d{1}\.\d{1})哪一种作为中间点,删除它后面的部分名称并保留扩展名?
谢谢!

最佳答案

此表达式应该适用于您的要求:

-replace '[\s\-]v\d+\.*\d*.*(?=\.\w+$)', ''

解释表达式
  • [\s\-]匹配单个空白字符或文字 -
  • v匹配文字 v
  • \d+匹配一行中的一个或多个数字字符。 +表示“匹配一个或多个前面的 token
  • \.匹配文字 .
  • \d*类似于 \d+ ,但 *表示“匹配零个或多个前面的 token ”
  • .匹配任意字符
  • ()表示一个组。将此视为要匹配的子表达式。
  • ?=积极前瞻。匹配主表达式之后的组,但不将其包含在结果中。
  • \w+匹配一行中的一个或多个单词字符。
  • $匹配字符串末尾或行尾

  • 所以在简单的英语中,主要的表达出现在 (?=) 之前。并且仅当匹配出现在正前瞻之前,才会返回匹配。
    在这种情况下,正向先行查找类似于文件扩展名的任何内容(文字 . 后跟任意数量的单词字符和行尾)。

    关于regex - Powershell重命名文件删除从正则表达式子字符串开始的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58594735/

    相关文章:

    sql - 将T-SQL文件转换为Powershell脚本

    json - Powershell 脚本缺少类型名称

    php - 如何将两个或多个破折号转换为单个破折号并删除字符串开头和结尾的所有破折号?

    javascript - 将错误与 if 语句混淆

    regex - 使用正则表达式计算 SQL 查询中 WHERE 过滤器的数量

    arrays - 用于将元素添加到数组的PowerShell函数

    excel - 使用每个列出的 OU 的所有计算机创建 excel csv 文件

    powershell - 如何正确检查进程是否正在运行并停止它

    JavaScript Regex 将长日期时间转换为短日期并将长数字转换为小数点后两位

    regex - 添加到缺少模式的行的末尾