正则表达式,用于反转用逗号分隔的两个未知单词的顺序

时间:2015-03-14 12:29:04

标签: regex

我正在尝试使用ReNamer正则表达式来反转使用作者姓名的文件夹名称。它们被设置为" LastName,FirstName"我需要将它们更改为" FirstName LastName"减去逗号。在ReNamer中,正则表达式用法在一行上设置为表达式&在第二个替换。我假设在这种情况下输入然后输出。我从这里尝试了几种解决方案但根本无法完成任何工作。帮助文件声明它使用Delphi。我几乎不了解正则表达式的极端基础知识所以非常感谢任何和所有的帮助。

1 个答案:

答案 0 :(得分:0)

ReNamer's find-and-replace supports backreferences.这意味着您可以将LastName, FirstName与以下项匹配:

(.+),\s*(.+)

(.+)          LastName as subexpression 1
    ,\s*      delimiter between LastName and FirstName, comma followed by any amount of whitespace
        (.+)  FirstName as subexpression 2

并使用以下替换字符串吐出FirstName LastName

$2 $1

$2     backreference to subexpr 2, which is FirstName
   $1  backreference to subexpr 1, which is LastName

此构造和类似构造可在支持带有反向引用的正则表达式的任何查找和替换上工作,而不仅仅是ReNamer。


您可以通过稍微修改使(.+),\s*(.+)适应不同的用例。例如,要禁止姓氏中的逗号,可以使姓氏子表达式匹配[^,]+而不是.+

([^,]+),\s*(.+)

 [^,]            anything but comma

或者确保分隔符始终是逗号,后跟空白:

(.+),\s+(.+)

     \s+      one or more whitespace characters (\s* accepts zero or more)

或者允许使用空名称:

(.*),\s*(.*)