Regex Powershell将“-anything”之类的字符串替换为“\u
我正在尝试替换文件名中的字符串。字符串始终以a-开头,以x结尾。中间可以是数字、文本或两者 我已经成功地改变了,但正则表达式正在杀死我。我是一个完全的初学者,所以整个代码是从其他文章中拼凑而成的Regex Powershell将“-anything”之类的字符串替换为“\u,regex,powershell,replace,Regex,Powershell,Replace,我正在尝试替换文件名中的字符串。字符串始终以a-开头,以x结尾。中间可以是数字、文本或两者 我已经成功地改变了,但正则表达式正在杀死我。我是一个完全的初学者,所以整个代码是从其他文章中拼凑而成的 $baseDirectory = "C:\Test\Rename\" $a = "\-(.*?)\_" $b = "_" $Include = '*.jpg' Pushd $baseDirectory Get-ChildItem -Filter "*$a*" -Recurse| Rename-
$baseDirectory = "C:\Test\Rename\"
$a = "\-(.*?)\_"
$b = "_"
$Include = '*.jpg'
Pushd $baseDirectory
Get-ChildItem -Filter "*$a*" -Recurse|
Rename-Item -NewName {$_.Name -replace $a,$b} -ErrorAction SilentlyContinue
PopD
目标
A121000-22_01.jpg->A121000_01.jpg
A478BFE-876_02.jpg->A478BFE_02.jpg
A124568-59B_03.jpg->A124568_03.jpg
结果是没有变化。您现有的正则表达式非常接近。没有必要用u替换 选择1 您可以更改惰性量词。*?如图所示,添加到字符异常类[^!]*中 这符合: -这个字是字面意思。 [^ u]*除u之外的任何字符一旦到达u,此操作将停止任意次数。 选择2 如果您需要确保u字符存在,那么您可以使用下面的代码,注意最后一行不匹配
-[^_]*(?=_)
这符合:
-这个字是字面意思。
[^ u]*除u之外的任何字符一旦到达u,此操作将停止任意次数。
?=uu确保以下字符按字面意思
另外
我将您的代码更改为以下代码,并将-Filter*$a*替换为-Include*.jpg:
如果我删除反斜杠字符,则替换代码对我有效。
-[^_]*(?=_)
$baseDirectory = "C:\test\Rename"
$a = "-[^_]*(?=_)"
Pushd $baseDirectory
Get-ChildItem -Include "*.jpg" -Recurse|
Rename-Item -NewName {$_.Name -replace $a,""} -ErrorAction SilentlyContinue
PopD