Regex Powershell将“-anything”之类的字符串替换为“\u

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-

我正在尝试替换文件名中的字符串。字符串始终以a-开头,以x结尾。中间可以是数字、文本或两者

我已经成功地改变了,但正则表达式正在杀死我。我是一个完全的初学者,所以整个代码是从其他文章中拼凑而成的

$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