2016-06-09 44 views
0

我有一個文本文件,如下所示:格式的正則表達式匹配的文本文件,並替換

Chanelle 
    Jettie 
    Winnie 
    Jen 
    Shella 
    Krysta 
    Tish 
    Monika 
    Lynwood 
    Danae 
    2649 
    2466 
    2890 
    2224 
    2829 
    2427 
    2816 
    2648 
    2833 
    2453 

我需要使它看起來像這樣

Chanelle 2649 
    Jettie  2466 
    ...  ... 

我嘗試了很多崇高的編輯器,但無法找出正則表達式來做到這一點。有人可以證明它是否可以完成。

+0

我不認爲你可以只用正則表達式來做到這一點。你有編程語言可用嗎?你可以做一些像'/^\ s * \ d + $/m'來拉取所有數字引用,然後將左邊的alpha引用('explode(「\ n」,$ string);'in PHP)分開並匹配它們1 - 1建立一個新文件。 – chris85

+0

是的我知道多種語言,但我只是試圖用正則表達式來完成。正如你所說,也許它不能單獨使用正則表達式 –

+0

你實際上並不需要一個正則表達式... – JanLeeYu

回答

3

我在Notepad ++中測試了以下內容,但它應該能夠普遍使用。

使用此作爲搜索字符串:

(?:(\s+[A-Za-z]+)(\r?\n))((?:\s*[A-Za-z]*\r?\n)+)\s+(\d+) 

,並以此作爲替代:

$1 $4$2$3 

運行更換一次將在同一時間做同一行,如果你運行多個它會繼續替換行,直到沒有匹配的行。

另外,如果你想擁有由製表符對齊的值,你可以使用這個作爲替代品,但它不會匹配在所有情況下:

$1\t\t$4$2$3 
+0

不幸的是,在崇高,記事本++和在線正則表達式網站上沒有匹配:( –

+0

這對我來說很好在ST3。確保你有正則表達式匹配,然後繼續點擊'Replace'直到所有的數字都被轉置。 – MattDMo

2

雖然正則表達式answer by SeinopSys將工作,你不不需要一個正則表達式來做到這一點 - 相反,你可以利用Sublime的多個遊標。

  1. 將光標置於第1行的開頭,然後按住Shift鍵選擇所有的名字。

  • 命中Ctrl鍵移位大號Selection -> Split into Lines)分裂成選擇線。
  • Ctrl鍵Ç複製。

  • 將光標放在第11行(第一號線),然後按Ctrl鍵(在Windows/OS X)或Alt鍵(Linux)的放置光標在每個數字行的開頭。

  • 命中Ctrl鍵V粘貼號碼之前的名稱。
  • 您現在可以刪除頂部的名字和你所有的設置。另外,您也可以使用Ctrl鍵X削減名在步驟3
  • +0

    理論上Shift + Click也可以工作,以防名單太長而無法在合理的範圍內用Shift + Down進行選擇時間框架 – SeinopSys

    +0

    @SeinopSys這是真的,我在這個例子中使用了Shift-Down,因爲列表的大小很小。 – MattDMo