需要一些建议。我正在尝试使用正则表达式来做一些可能无法完成的事情,如果可能的话,这很麻烦。我什么都不能工作。我正在尝试为我的PDF文件创建一个标记系统。因此,如果我有此文件名:
"csharp 8 in a nutshell[studying programming csharp ebooks].pdf"
我希望'[]'内的所有单词中都带有'@'。所以上面的文件名看起来像这样:
"csharp 8 in a nutshell[@studying @programming @csharp @ebooks].pdf"
问题是将'@'保留在'[]'中。例如,我宁愿文件名最前面的“ csharp”不带有“ @”。
另外,我正在使用一个名为“批量重命名实用程序”的批量重命名器来帮助我。
谢谢。
批量重命名实用程序不支持替换多个匹配项,您只能匹配整个文件名并使用捕获组/反向引用执行替换。
由于您使用的是Windows,因此建议您使用Powershell:
cd 'C:\YOUR_FOLDER\HERE'
Get-ChildItem -File | Rename-Item -NewName { $_.Name -replace '(?<=\[[^][]*?)\w+(?=[^][]*])','@$&' }
请参见此regex演示及其在.NET regex风格下可以使用的证明。
(?<=\[[^][]*?)
-在此位置之前,必须存在[
和,然后除[
和以外的任意数量的字符]
,应尽可能少\w+
-1个以上的字符(?=[^][]*])
-在此位置之后,除了[
和之外]
,必须有尽可能多的]
字符,然后是一个字符。替换为@
+整个匹配值($&
)。
另外,您可以使用
Get-ChildItem -File | Rename-Item -NewName { $_.Name -replace '(\G(?!\A)[^][\w]+|\[)(\w+)','$1@$2' }
请参阅此regex演示和.NET regex测试。
(\G(?!\A)[^][\w]+|\[)
-第1组($1
):上一场比赛的结尾和1个以上的字符(除之外)]
,[
单词char或一个[
char(\w+)
-第2组($2
):一个或多个单词字符。如果只想重命名* .pdf文件,请替换Get-ChildItem -File
为Get-ChildItem *.pdf
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句