1. 程式人生 > >EditPlus正則替換

EditPlus正則替換

有時使用文字編輯器時,為了查詢,替換更高效,需要使用強大的正則表示式,此處為EditPlus正則表示式及其簡要說明。 表示式        說明
/t        製表符.
/n        新行.
.        匹配任意字元.
|        匹配表示式左邊和右邊的字元. 例如, "ab|bc" 匹配 "ab" 或者 "bc".
[]        匹配列表之中的任何單個字元. 例如, "[ab]" 匹配 "a" 或者 "b". "[0-9]" 匹配任意數字.
[^]        匹配列表之外的任何單個字元. 例如, "[^ab]" 匹配 "a" 和 "b" 以外的字元. "[^0-9]" 匹配任意非數字字元.

*        其左邊的字元被匹配任意次(0次,或者多次). 例如 "be*" 匹配 "b", "be" 或者 "bee".
+        其左邊的字元被匹配至少一次(1次,或者多次). 例如 "be+" 匹配 "be" 或者 "bee" 但是不匹配 "b".
?        其左邊的字元被匹配0次或者1次. 例如 "be?" 匹配 "b" 或者 "be" 但是不匹配 "bee".
^        其右邊的表示式被匹配在一行的開始. 例如 "^A" 僅僅匹配以 "A" 開頭的行.
$        其左邊的表示式被匹配在一行的結尾. 例如 "e$" 僅僅匹配以 "e" 結尾的行.
()        影響表示式匹配的順序,並且用作表示式的分組標記.

/        轉義字元. 如果你要使用 "/" 本身, 則應該使用 "//".
正則表示式應用——刪除空行   ^[ /t]*/n
表示式的分組使用()來標記. 表示式的分組可以被引用為 /0, /1, /2, /3, 等等. /0 表示被匹配的所有字串. /1 表示被匹配的第一個分組, /2 表示第二個分組, 依此類推. 舉例如下.
原文        查詢         替換                 結果
abc     (ab)(c)        /0-/1-/2        abc-ab-c
abc     a(b)(c)        /0-/1-/2        abc-b-c
abc     (a)b(c)        /0-/1-/2        abc-a-c

2、替換html檔案中的非法“<",">”
下面的方法將把html檔案中類似於<str>的非html標記的尖括號替換掉。
例如,將<str>用下面方法替換的結果是:&lt;str&gt;
這裡只提供瞭解決問題的思路。具體的應用,要看具體的情況。

查詢內容:<([^/htbpl][^ >]*)>
替換內容:&lt;\1&gt;

 

解釋:<([^/htbpl][^ >]*)>     ---要查詢的尖括號包圍的字串。
        其中:(……)                      ---括號表示先把括號中的內容儲存起來,待後面引用。
            [^/htbpl]                ----表示尖括號內第一個字元不是/、h(tml)、t(itle)、b(ody)等
            [^ > ]*                      ----表示後面跟若干(*)個非(^)>、非空格的字元。
             \1                         ----editplus中的特殊用法,表示對原字串中括號內字串的引用。等價於正則表示式中的$1。

EditPlus正則表示式替換字串詳解
網上搜集了些例項


正則表示式是一個查詢的字串,它包含一般的字元和一些特殊的字元,特殊字元可以擴充套件查詢字串的能力,正則表示式在查詢和替換字串的作用不可忽視,它能很好提高工作效率。


EditPlus的查詢,替換,檔案中查詢支援以下的正則表示式:


Expression Description
\t Tab character.
\n New line.
. Matches any character.
| Either expression on its left and right side matches the target string.
For example, “a|b” matches “a” and “b”.
[] Any of the enclosed characters may match the target character.
For example, “[ab]” matches “a” and “b”. “[0-9]” matches any digit.
[^] None of the enclosed characters may match the target character.
For example, “[^ab]” matches all character EXCEPT “a” and “b”.
“[^0-9]” matches any non-digit character.
* Character to the left of asterisk in the expression should match 0 or more times.
For example “be*” matches “b”, “be” and “bee”.
+ Character to the left of plus sign in the expression should match 1 or more times.
For example “be+” matches “be” and “bee” but not “b”.
? Character to the left of question mark in the expression should match 0 or 1 time.
For example “be?” matches “b” and “be” but not “bee”.
^ Expression to the right of ^ matches only when it is at the beginning of line.
For example “^A” matches an “A” that is only at the beginning of line.
$ Expression to the left of $ matches only when it is at the end of line.
For example “e$” matches an “e” that is only at the end of line.
() Affects evaluation order of expression and also used for tagged expression.
\ scape character. If you want to use character “\” itself, you should use “\\”.




例子:


原始串
str[1]abc[991];
str[2]abc[992];
str[11]abc[993];
str[22]abc[994];
str[111]abc[995];
str[222]abc[996];
str[1111]abc[997];
str[2222]abc[999];


目標串:
abc[1];
abc[2];
abc[11];
abc[22];
abc[111];
abc[222];
abc[1111];
abc[2222];


處理:
查詢串:str\[([0-9]+)\]abc\[[0-9]+\]
替換串:abc[\1]


【1】正則表示式應用——替換指定內容到行尾
原始文字如下面兩行
abc aaaaa
123 abc 444


希望每次遇到“abc”,則替換“abc”以及其後到行尾的內容為“abc efg”
即上面的文字最終替換為:
abc efg
123 abc efg


解決:
① 在替換對話方塊,查詢內容裡輸入“abc.*”
② 同時勾選“正則表示式”複選框,然後點選“全部替換”按鈕
其中,符號的含義如下:
“.” =匹配任意字元
“*” =匹配0次或更多


注意:其實就是正則表示式替換,這裡只是把一些曾經提出的問題加以整理,單純從正則表示式本身來說,就可以引申出成千上萬種特例。


【2】正則表示式應用——數字替換
希望把
asdadas123asdasdas456asdasdasd789asdasd
替換為:
asdadas[123]asdasdas[456]asdasdasd[789]asdasd


在替換對話方塊裡面,勾選“正則表示式”複選框;
在查詢內容裡面輸入“[0-9][0-9][0-9]”,不含引號
“替換為:”裡面輸入“[\0\1\2]”,不含引號
範圍為你所操作的範圍,然後選擇替換即可。


實際上這也是正則表示式的使用特例,“[0-9]”表示匹配0~9之間的任何特例,同樣“[a-z]”就表示匹配a~z之間的任何特例
上面重複使用了“[0-9]”,表示連續出現的三個數字
“\0”代表第一個“[0-9]”對應的原型,“\1”代表第二個“[0-9]”對應的原型,依此類推
“[”、“]”為單純的字元,表示新增“[”或“]”,如果輸入“其它\0\1\2其它”,則替換結果為:


asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd


功能增強(by jiuk2k):
如果將查詢內容“[0-9][0-9][0-9]”改為“[0-9]*[0-9]”,對應1 或 123 或 12345 或 …
大家根據需要定製


相關內容還有很多,可以自己參考正則表示式的語法仔細研究一下


【3】正則表示式應用——刪除每一行行尾的指定字元
因為這幾個字元在行中也是出現的,所以肯定不能用簡單的替換實現
比如
12345 1265345
2345
需要刪除每行末尾的“345”
這個也算正則表示式的用法,其實仔細看正則表示式應該比較簡單,不過既然有這個問題提出,說明對正則表示式還得有個認識過程,解決方法如下
解決:
在替換對話方塊中,啟用“正則表示式”複選框
在查詢內容裡面輸入“345$”
這裡“$”表示從行尾匹配


如果從行首匹配,可以用“^”來實現,不過 EditPlus 有另一個功能可以很簡單的刪除行首的字串
a. 選擇要操作的行
b. 編輯-格式-刪除行註釋
c. 在彈出對話方塊裡面輸入要清除的行首字元,確定


【4】正則表示式應用——替換帶有半形括號的多行
幾百個網頁中都有下面一段程式碼:
\n
在替換對話方塊啟用“正則表示式”選項,這時就可以完成替換了


【5】正則表示式應用——刪除空行
啟動EditPlus,開啟待處理的文字型別檔案。
①、選擇“查詢”選單的“替換”命令,彈出文字替換對話方塊。選中“正則表示式”複選框,表明我們要在查詢、替換中使用正則表示式。然後,選中“替換範圍”中的“當前檔案”,表明對當前檔案操作。
②、單擊“查詢內容”組合框右側的按鈕,出現下拉選單。
③、下面的操作新增正則表示式,該表示式代表待查詢的空行。(技巧提示:空行僅包括空格符、製表符、回車符,且必須以這三個符號之一作為一行的開頭,並且以回車符結尾,查詢空行的關鍵是構造代表空行的正則表示式)。
直接在”查詢”中輸入正則表示式“^[ \t]*\n”,注意\t前有空格符。
(1)選擇“從行首開始匹配”,“查詢內容”組合框中出現字元“^”,表示待查詢字串必須出現在文字中一行的行首。
(2)選擇“字元在範圍中”,那麼在“^”後會增加一對括號“[]”,當前插入點在括號中。括號在正則表示式中表示,文字中的字元匹配括號中任意一個字元即符合查詢條件。
(3)按一下空格鍵,新增空格符。空格符是空行的一個組成成分。
(4)選擇“製表符”,新增代表製表符的“\t”。
(5)移動游標,將當前插入點移到“]”之後,然後選擇“匹配 0 次或更多”,該操作會新增星號字元“*”。星號表示,其前面的括號“[]”內的空格符或製表符,在一行中出現0個或多個。
(6)選擇“換行符”,插入“\n”,表示回車符。
④、“替換為”組合框保持空,表示刪除查詢到的內容。單擊“替換”按鈕逐個行刪除空行,或單擊“全部替換”按鈕刪除全部空行(注意:EditPlus有時存在“全部替換”不能一次性完全刪除空行的問題,可能是程式BUG,需要多按幾次按鈕)。


1.在漢化的時候,是否經常碰到這樣的語句需要翻譯:


Code:
“Error adding the post!”;
“Error adding the comment!”;
“Error adding the user!”;


如果有很多類似的檔案一個一個翻譯顯然很累而且感覺很無聊。


其實可以這樣處理,在Editplus裡面用 替換 功能,在替換對話方塊選中“正則表示式”複選框:
查詢原檔案:


Code:
“Error adding ([^!|"|;]*)


替換成:


Code:
“在增加\1時發生錯誤


這樣替換之後發生了什麼?結果是:


Code:
“在增加the post時發生錯誤!”;
“在增加the comment時發生錯誤!”;
“在增加the user時發生錯誤!”;


ok,接下來你會怎麼做?當然再替換一次把the post、the comment、the user替換成你要翻譯的詞。得到最後的結果:


Code:
“在增加帖子時發生錯誤!”;
“在增加評論時發生錯誤!”;
“在增加使用者時發生錯誤!”;


2.要提取的單詞在中間,比如:


Code:
can not be deleted because
can not be added because
can not be updating because


可以用這種方式:
在Editplus裡面用 替換 功能,在替換對話方塊選中“正則表示式”複選框:
查詢原檔案:


Code:
can not be ([^ ]*) because


替換成:


Code:
無法被\1因為


這樣替換之後發生了什麼?結果是:


Code:
無法被deleted因為
無法被added因為
無法被updating因為


其餘步驟如上。


在漢化量很大而且句式比較單調的情況下對效率的提高很明顯!


解釋一下:([^!|"|;]*) 的意思是 不等於 ! 和 ” 和 ; 中的任何一個,意思就是這3個字元之外的所有字元將被選中(替換區域);
\1 即被選中的替換區域所在的新位置(複製到這個新位置)。


3.經常手工清理一行一行地刪除文字檔案裡面的空白行,其實可以交給Editplus更好的完成,在Editplus裡面用替換功能,在替換對話方塊選中“正則表示式”複選框:
查詢原檔案:


Code:
^[ \t]*\n


替換部分為空就可以刪除空白行了,執行一下看看:)


abandon[2'b9nd2n]v.拋棄,放棄
abandonment[2'b9nd2nm2nt]n.放棄
abbreviation[2bri:vi'ei62n]n.縮寫
abeyance[2'bei2ns]n.緩辦,中止
abide[2'baid]v.遵守
ability[2'biliti]n.能力
able['eibl]adj.有能力的,能幹的
abnormal[9b'n0:m2l]adj.反常的,變態的
aboard[2'b0:d]adv.船(車)上


1.
查詢: (^[a-zA-Z0-0\-]+)(\[*.*\]+)(.*)
替換: @@@@@”\1″,”\2″,”\3″,
效果:
@@@@@”abandon”,”[2'b9nd2n]“,”v.拋棄,放棄”,
@@@@@”abandonment”,”[2'b9nd2nm2nt]“,”n.放棄”,
@@@@@”abbreviation”,”[2bri:vi'ei62n]“,”n.縮寫”,
@@@@@”abeyance”,”[2'bei2ns]“,”n.緩辦,中止”,
@@@@@”abide”,”[2'baid]“,”v.遵守”,
@@@@@”ability”,”[2'biliti]“,”n.能力”,
@@@@@”able”,”['eibl]“,”adj.有能力的,能幹的”,
@@@@@”abnormal”,”[9b'n0:m2l]“,”adj.反常的,變態的”,
@@@@@”aboard”,”[2'b0:d]“,”adv.船(車)上”,


2.
查詢: \n
替換:
注: 要次替換內容為空
效果:
@@@@@”abandon”,”[2'b9nd2n]“,”v.拋棄,放棄”,@@@@@”abandonment”,”[2'b9nd2nm2nt]“,”n.放棄”,@@@@@”abbreviation”,”[2bri:vi'ei62n]“,”n.縮寫”,@@@@@”abeyance”,”[2'bei2ns]“,”n.緩辦,中止”,@@@@@”abide”,”[2'baid]“,”v.遵守”,@@@@@”ability”,”[2'biliti]“,”n.能力”,@@@@@”able”,”['eibl]“,”adj.有能力的,能幹的”,@@@@@”abnormal”,”[9b'n0:m2l]“,”adj.反常的,變態的”,@@@@@”aboard”,”[2'b0:d]“,”adv.船(車)上”,@@@@@”abolish”,”[2'b0li6]“,”v.廢除,取消”,@@@@@”abolition”,”[9b2'li62n]“,”n.廢除,取消”


3.
查詢: @@@@@
替換: \n
效果:
“abandon”,”[2'b9nd2n]“,”v.拋棄,放棄”,
“abandonment”,”[2'b9nd2nm2nt]“,”n.放棄”,
“abbreviation”,”[2bri:vi'ei62n]“,”n.縮寫”,
“abeyance”,”[2'bei2ns]“,”n.緩辦,中止”,
“abide”,”[2'baid]“,”v.遵守”,
“ability”,”[2'biliti]“,”n.能力”,
“able”,”['eibl]“,”adj.有能力的,能幹的”,
“abnormal”,”[9b'n0:m2l]“,”adj.反常的,變態的”,
“aboard”,”[2'b0:d]“,”adv.船(車)上”,
“abolish”,”[2'b0li6]“,”v.廢除,取消”,


4. 任務完成