我很难编写一个 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/