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

Regular expression to remove multiple segments in file names

我有几个文件要重命名。我将使用批量重命名软件重命名它们。它可以使用正则表达式删除模式。以下是两个文件名示例:

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

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

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

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

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

在这种情况下,不删除,只保留捕获组 1 和 2 的内容。许多工具允许您在替换模式中说出类似 </code> 的内容。</p> <p>如果您的工具删除了整个匹配项并且您坚持这样做,则您将不得不使用两次通过的方法,因为您要删除两个断开连接的区域。这将需要一个支持前瞻和后视的工具,就像大多数工具一样。</p> <p>第一遍将使用</p> <pre><code>_\s.*(?=\(\d+ min\))

第二遍将移除

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