假設名稱的數量來進行切換相當小,這可能會爲你工作:
(?: (?<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