Powershell用“ _”替换字符串“ -anything_”

时间:2019-04-03 14:59:58

标签: regex powershell replace

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

我已经成功地将“-”更改为“”,但是正则表达式正在杀死我。我是一个完整的初学者,所以整个代码都被其他文章拼凑了。

Model Form

目标
A121000-22_01.jpg-> A121000_01.jpg
A478BFE-876_02.jpg-> A478BFE_02.jpg
A124568-59B_03.jpg-> A124568_03.jpg

结果没有改变。

1 个答案:

答案 0 :(得分:1)

您现有的正则表达式非常接近。无需替换为_

选项1

您可以将惰性量词(.*?)更改为字符异常类[^_]*,如here所示。

-[^_]*

此匹配项:

  • -从字面上看是这个字符。
  • [^_]*_以外的任何字符任意次数(一旦到达_,此字符便停止。)

选项2

如果需要确保存在_字符,则可以使用以下内容代替here(注意,最后一行不匹配)。

-[^_]*(?=_)

此匹配项:

  • -从字面上看是这个字符。
  • [^_]*_以外的任何字符任意次数(一旦到达_,此字符便停止。)
  • (?=_)确保以下字符从字面上是_

另外

我将您的代码更改为以下代码,并且对我有用(将-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