假设名称的数量来进行切换相当小,这可能会为你工作:
(?: (?<A>John)\s(?<B>Doe) | (?<A>Jayne)\s(?<B>Eyre) | (?<B>\w+)\s(?<A>\w+))
我已经包括了可读性空白;一定要把它拿出来或者使用忽略它的正则表达式选项。我使用Expresso,所以正则表达式使用.Net语法,但我认为您可以根据需要调整它。
替换正则表达式是:
${B} ${A}
正则表达式具有3个替代品; 2个(或更多)用于我们要切换的名称,另一个用于所有其他不应该切换的名称。名称部分由替换正则表达式用来执行切换的命名捕获组(A & B)定义。关键在于,在第三种选择中,我们交换命名的捕获组,以便我们不想切换的名称实际被切换,但不起作用。
更复杂的名称变化(约翰·C·赖利,奥莉维亚·纽顿 - 约翰)将无法正常工作,但你原来的正则表达式保持它的简单,我也跟着。
更新的答案......
似乎Flex的正则表达式不支持命名组在更换正则表达式。试验后,我拿出了我最初的想法的变化,只有使用编号的捕获组,似乎工作:
(John)\s(Doe)|(Jayne)\s(Eyre)|(\w+)\s(\w+)
更换的正则表达式是:
$2$4$5 $1$3$6
这是相当多的比原来的要少,但是,如果要切换的名称数量合理,这可能是可行的。在我的测试中,上述正则表达式和替换正则表达式和下面的输入给定:
John Doe
Jayne Eyre
Bob Smith
我得到了以下的输出:
Doe John
Eyre Jayne
Bob Smith
什么excactly是区分名从那些被切换的属性不应该是? – 2012-02-28 16:35:28
我应该只开关只能姓名李四和杰恩爱。未混合的名称和Sournames像杰恩李四或约翰·爱。 编辑:我的名字和sournames的夫妇应该被交换名单。 – 2012-02-28 16:50:10