删除powershell正则表达式中的括号?

时间:2013-12-26 15:32:58

标签: regex powershell

我无法找到一个对我来说很清楚的答案。我正在更改目录中的一堆图像文件名,当我重命名它们时,它们都被重命名为image (1).png image (2).png以获得尽可能多的图像,然后我在power shell中运行它。

Dir | Rename-Item –NewName { $_.name –replace " ","_" }

这会找到空间并将其重命名为image_(1).png image_(2).png,这很容易,但是尝试更换括号会变得很麻烦。我试图摆脱他们看起来像这样image_1.png image_2.png,但是找到答案却真的很令人沮丧。

我希望我能写下来。

Dir | Rename-Item –NewName { $_.name –replace "\(*\)","*" } 

Dir | Rename-Item –NewName { $_.name –replace "\([1-10]\)","[1-10]" }

Dir | Rename-Item –NewName { $_.name –replace "\(\W\)","\W" }

我尝试了所有这些,你会认为语法是有效的,但是没有:(所以我希望在正确的方向上稍微推动一下。

4 个答案:

答案 0 :(得分:6)

我没有足够的SO Rep来评论您的问题所以我必须尝试回答。你需要逃脱你的反斜杠吗?即。替换

"\(*\)","" with "\\(*\\)",""

您的命令语法问题还是Regex本身?原始正则表达式看起来像这样:

^(?\<Name>.*)\((?<Number>\d*?)\)\.(?<Extension>.*$)

并替换为: $ {名称} _ $ {号码}。$ {扩展}

答案 1 :(得分:3)

怎么样:

Dir | Rename-Item –NewName { $_.name.replace(' ','_') -replace '[()]','' }

对于单个文字字符替换,字符串.replace()方法更有效。使用-replace运算符进行更复杂的操作,您需要一次指定多个字符。

答案 2 :(得分:1)

无法在答案下发表评论,但这是一种摆脱“()”和其中的文本的方法。

Rename-Item –NewName { $_.name -replace "(\(\d+\))",""}

\(\)对括号进行转义,使它们成为文字括号。未转义的括号将捕获的模式分组,以供以后参考,在这里您可能不需要使用括号。

希望这对某人有帮助。

答案 3 :(得分:0)

我做了两行
Dir |重命名项目–NewName {$ .name –替换“(”,“”}  Dir |重命名项–NewName {$ .name –replace“)”,“”}