【问题标题】:Search and replace pattern - regular expressions pattern搜索和替换模式 - 正则表达式模式
【发布时间】:2014-01-12 20:12:55
【问题描述】:

我正在使用 RegexRenamer 来重命名一些文件,使用 regex match&replace;

不幸的是,本教程没有涵盖任何接近我想做的事情,我也不太擅长理解正则表达式的工作原理。 我基本上想要做的是用以下模式重命名一些文件。

艺术家,姓名 - 歌曲名称

杰克逊,迈克尔 - 我们就是世界

最终结果应该是:

迈克尔·杰克逊 - 我们就是世界。

我对特色歌曲的这条规则有一些例外,但第一个示例的代码肯定会让我在谷歌上搜索数小时。

例外:

杰克逊、迈克尔和阿肯 - 握住我的手

应该是

迈克尔杰克逊和阿肯 - 握住我的手

【问题讨论】:

  • 至少教程应该告诉你一些关于捕获组和反向引用的事情?您可以捕获正则表达式匹配的文本并在替换中引用它们。

标签: regex


【解决方案1】:

正则表达式:

(\w+),\s+(\w+)

有替换:

$2 $1

Live demo #1

多次出现:

(?:(\w+),\s+(\w+))+

Live demo #2

如果歌曲名称中可能还包含逗号,,则使用:

(\w+),\s+(\w+)(?=.*?-)

【讨论】:

  • @ValentinDragan 并添加了另一个正则表达式以避免冲突
  • 如果碰巧有两个名字就行不通了——比如Jackson, Michael Andrew
  • @r3mus OP 可能会澄清这一点,然后我将编辑答案。
【解决方案2】:

你可以这样使用:

^([\w -]+?),\s+([\w -]+)\s+([&\w ]+)?\s*-\s+(.*)$

示例:http://regex101.com/r/pZ5fP6

【讨论】:

    【解决方案3】:

    正则表达式很难,尤其是如果您是新手。试试这个:

    Find: "([a-zA-Z]+), ([a-zA-Z]+)([a-zA-Z& ]*) \\- ([a-zA-Z ]+)\n"
             /\ group 1.  /\ group 2.   /\ 3.              /\ 4
    Replace: "$2 $1 $3 - $4"
    

    请注意,一些正则表达式字符需要转义,我使用双反斜杠对它们进行转义,就像您在大多数编程语言中所做的那样。如果您只需要一个反斜杠,请使用单个反斜杠,但请注意,您需要将 \n 替换为换行符。

    基本上它的作用是匹配两个逗号分隔的字母单词,分组为 $1 和 $2。 [a-zA-Z]+ 表示匹配一个或多个字母字符。括号使它捕获任何匹配项,以便我们稍后将其放入替换中。它交换这些名称。然后它在 $3 的破折号之前捕获任何额外的东西并附加它。这就像第 1 组和第 2 组,除了它还包括 & 字符和空格,并且它有 * 而不是 +,因此它匹配 0 个或多个字符。 (额外的部分可能存在也可能不存在)。最后,它以 4 美元的形式捕获歌曲名称并将其附加。我假设所有歌曲名称仅包含字母字符和空格。如果您的歌曲名称包含其他内容,则需要添加它。

    免责声明:此正则表达式未经测试,可能包含错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多