使用正则表达式删除文件名中的多个句段

时间:2018-10-14 14:55:59

标签: regex file-rename batch-rename

我有几个文件要重命名。我将使用批处理重命名器软件对其进行重命名。它可以使用正则表达式删除模式。这是两个文件名示例:

  • 13 (a 3f kd) kjhucj 1 _ m (52 min) - jrhkfq 324
  • 647 fjk3 d [63h hh] _ (jhgbh) abim (238 min)

我想删除_\s之后的所有字符,但保留\(\d+\smin\)部分。我希望将它们重命名为:

  • 13 (a 3f kd) kjhucj 1 (52 min)
  • 647 fjk3 d [63h hh] (238 min)

我尝试了_\s.*[^(\(\d+\smin\))],但结果很奇怪。我不知道这是否有可能。

2 个答案:

答案 0 :(得分:0)

方括号是正则表达式中的特殊字符:将一组字符放在[]之间时,它们被解释为与集合中的任何一个字符匹配。但是,这里您似乎要匹配一个真实的[字符。您可以通过在其前面加上反斜杠来使[不是 special ,因此请尝试用[替换正则表达式中的\[,看看是否会有所帮助。

答案 1 :(得分:0)

您真正想做的是删除_\s(之间的所有内容以及)之后的所有内容。另外,您希望将所有内容保持在_\s以及()之间。您应该旨在定义捕获组的定界符,而不是大多数情况下的内容:

(.+?)_\s.*(\(\d+ min\)).*

在这种情况下,不要删除,而仅保留捕获组1和2的内容。许多工具可让您在替换模式中说类似\1\2的内容。

如果您的工具删除了整个匹配项,并且您坚持要那样做,则必须使用两次通过方法,因为您要删除两个断开的区域。就像大多数工具一样,这将需要一个支持先行和后行的工具。

第一遍将使用

_\s.*(?=\(\d+ min\))

第二遍将删除

(?<=\(\d+ min\)).*