正则表达式删除文件名中的多个段
Regular expression to remove multiple segments in file names
我有几个文件要重命名。我将使用批量重命名软件重命名它们。它可以使用正则表达式删除模式。以下是两个文件名示例:
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\))]
但得到了奇怪的结果。我不知道这是否可能。
方括号是正则表达式中的特殊字符:当您将一组字符放在 [
和 ]
之间时,它们将被解释为匹配集合中的任何一个字符。但是,在这里您似乎想要匹配一个真正的 [
字符。您可以通过在 [
前面放置一个反斜杠来使 [
不是 special,因此请尝试将正则表达式中的 [
替换为 \[
看看是否有帮助。
您真正想要做的是删除 _\s
和 (
之间的所有内容,以及 )
之后的所有内容。或者,您希望将所有内容保持在 _\s
之前以及 (
和 )
之间。大多数情况下,您的目标应该是定义捕获组的定界符而不是内容:
(.+?)_\s.*(\(\d+ min\)).*
在这种情况下,不删除,只保留捕获组 1 和 2 的内容。许多工具允许您在替换模式中说出类似 </code> 的内容。</p>
<p>如果您的工具删除了整个匹配项并且您坚持这样做,则您将不得不使用两次通过的方法,因为您要删除两个断开连接的区域。这将需要一个支持前瞻和后视的工具,就像大多数工具一样。</p>
<p>第一遍将使用</p>
<pre><code>_\s.*(?=\(\d+ min\))
第二遍将移除
(?<=\(\d+ min\)).*
我有几个文件要重命名。我将使用批量重命名软件重命名它们。它可以使用正则表达式删除模式。以下是两个文件名示例:
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\))]
但得到了奇怪的结果。我不知道这是否可能。
方括号是正则表达式中的特殊字符:当您将一组字符放在 [
和 ]
之间时,它们将被解释为匹配集合中的任何一个字符。但是,在这里您似乎想要匹配一个真正的 [
字符。您可以通过在 [
前面放置一个反斜杠来使 [
不是 special,因此请尝试将正则表达式中的 [
替换为 \[
看看是否有帮助。
您真正想要做的是删除 _\s
和 (
之间的所有内容,以及 )
之后的所有内容。或者,您希望将所有内容保持在 _\s
之前以及 (
和 )
之间。大多数情况下,您的目标应该是定义捕获组的定界符而不是内容:
(.+?)_\s.*(\(\d+ min\)).*
在这种情况下,不删除,只保留捕获组 1 和 2 的内容。许多工具允许您在替换模式中说出类似 </code> 的内容。</p>
<p>如果您的工具删除了整个匹配项并且您坚持这样做,则您将不得不使用两次通过的方法,因为您要删除两个断开连接的区域。这将需要一个支持前瞻和后视的工具,就像大多数工具一样。</p>
<p>第一遍将使用</p>
<pre><code>_\s.*(?=\(\d+ min\))
第二遍将移除
(?<=\(\d+ min\)).*