天天看點

Notepad++正規表達式使用

推薦個正規表達式線上測試的工具http://ccmpp.com/Regex/

Notepad++正規表達式使用  

2011-01-06 10:01:35|  分類: 文檔 |  标簽:正規表達式  替換  notepad++  比對  查找  |舉報|字号 訂閱

 
 
      使用正規表達式可以很好地完成很多繁瑣耗時的工作,以下抄錄editplus正規表達式的使用,同樣适用于notepad++:
表達式 說明 
	 制表符. 

 新行. 
. 比對任意字元. 
| 比對表達式左邊和右邊的字元. 例如, "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" 結尾的行. 
() 影響表達式比對的順序,并且用作表達式的分組标記. 
 轉義字元. 如果你要使用 "" 本身, 則應該使用 "\". 

例子: 

原始串 
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]”,不含引号 
“替換為:”裡面輸入“[012]”,不含引号 
範圍為你所操作的範圍,然後選擇替換即可。 

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

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】正規表達式應用——替換帶有半角括号的多行 
幾百個網頁中都有下面一段代碼: 

 
在替換對話框啟用“正規表達式”選項,這時就可以完成替換了 

【5】正規表達式應用——删除空行 
啟動EditPlus,打開待處理的文本類型檔案。 
①、選擇“查找”菜單的“替換”指令,彈出文本替換對話框。選中“正規表達式”複選框,表明我們要在查找、替換中使用正規表達式。然後,選中“替換範圍” 中的“目前檔案”,表明對目前檔案操作。
②、單擊“查找内容”組合框右側的按鈕,出現下拉菜單。 
③、下面的操作添加正規表達式,該表達式代表待查找的空行。(技巧提示:空行僅包括空格符、制表符、回車符,且必須以這三個符号之一作為一行的開頭,并且 以回車符結尾,查找空行的關鍵是構造代表空行的正規表達式)。 
直接在”查找”中輸入正規表達式“^[ 	]*
”,注意	前有空格符。 
(1)選擇“從行首開始比對”,“查找内容”組合框中出現字元“^”,表示待查找字元串必須出現在文本中一行的行首。 
(2)選擇“字元在範圍中”,那麼在“^”後會增加一對括号“[]”,目前插入點在括号中。括号在正規表達式中表示,文本中的字元比對括号中任意一個字元 即符合查找條件。 
(3)按一下空格鍵,添加空格符。空格符是空行的一個組成成分。 
(4)選擇“制表符”,添加代表制表符的“	”。 
(5)移動光标,将目前插入點移到“]”之後,然後選擇“比對 0 次或更多”,該操作會添加星号字元“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出現0個或多個。 
(6)選擇“換行符”,插入“
”,表示回車符。 
④、“替換為”組合框保持空,表示删除查找到的内容。單擊“替換”按鈕逐個行删除空行,或單擊“全部替換”按鈕删除全部空行(注意: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: 
^[ 	]*
 

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

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. 
查找: 
 
替換: 
注: 要次替換内容為空 
效果: 
@@@@@”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. 
查找: @@@@@ 
替換: 
 
效果: 
“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.廢除,取消”, 
原文位址:http://www.cnblogs.com/answer/archive/2010/03/29/1699751.html

      現在我手上有一堆漢字,是中國34個省市自治區(一直聽說是36個,結果查詢一下是34個),如下:
北京市
天津市
上海市
...
      想改成這樣:
INSERT INTO province_info(province_name) VALUES ('北京市');
INSERT INTO province_info(province_name) VALUES ('天津市');
INSERT INTO province_info(province_name) VALUES ('上海市');
...
      就是要把"北京市"放到下面一行語句單引号之間
INSERT INTO province_info(province_name) VALUES ('');
可以使用替換,選擇支援正規表達式,查找目标為
(.*)
替換為
INSERT INTO province_info(province_name) VALUES ('1');
查找目标.*即可查找到目标,加上()為得是替換的時候用 1 來使用
      這樣就可以進行快速地替換了。