が、これはあなたのために働くかもしれない、かなり小さいです:
(?: (?<A>John)\s(?<B>Doe) | (?<A>Jayne)\s(?<B>Eyre) | (?<B>\w+)\s(?<A>\w+))
私は読みやすくするために空白が含まれています。それを取り除くか、それを無視するregexオプションを使用してください。 Expressoを使ったので、regexesは.Net構文になっていますが、必要に応じてそれを調整することができます。
代替正規表現は次のとおりです。
${B} ${A}
正規表現は3つの選択肢を持っています。切り替えたい名前の場合は2(またはそれ以上)、切り替えるべきでない他のすべての名前の場合は1つです。名前部分は、交換を行うために置換正規表現によって使用される名前付きキャプチャグループ(A & B)で定義されます。トリックは、3番目の選択肢では、名前を変更するキャプチャグループをスワップするので、切り替えたくない名前は実際には切り替わりますが、効果はありません。
もっと複雑な名前のバリエーション(John C. Reilly、Olivia Newton-John)は動作しませんが、元の正規表現が単純なままになっているので、私はそれに従いました。
更新答え......
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そのいけないものの中から切り替えることに名前を区別する性質とは何かあれ? –
私はJohn DoeとJayne Eyreの名前のみを切り替えるべきです。 Jayne DoeやJohn Eyreのような名前とSournamesが混在することはありません。 編集:私は交換する必要がある名前とsournamesのカップルのリストを持っています。 –