Java Blog for Alex Wan

          Let life be beautiful like summer flowers and death like autumn leaves.

          統(tǒng)計(jì)

          留言簿(10)

          BlogJava

          Blogs

          DIV+CSS

          JQuery相關(guān)

          友情鏈接

          常去的地方

          數(shù)據(jù)供應(yīng)

          閱讀排行榜

          評(píng)論排行榜

          [ZT]EditPlus正則表達(dá)式替換字符串詳解

          網(wǎng)上搜集了些實(shí)例

          正則表達(dá)式是一個(gè)查詢的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以擴(kuò)展查找字符串的能力,正則表達(dá)式在查找和替換字符串的作用不可忽視,它能很好提高工作效率。

          EditPlus的查找,替換,文件中查找支持以下的正則表達(dá)式:

          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];

          目標(biāo)串:
          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】正則表達(dá)式應(yīng)用——替換指定內(nèi)容到行尾
          原始文本如下面兩行
          abc aaaaa
          123 abc 444

          希望每次遇到“abc”,則替換“abc”以及其后到行尾的內(nèi)容為“abc efg”
          即上面的文本最終替換為:
          abc efg
          123 abc efg

          解決:
          ① 在替換對(duì)話框,查找內(nèi)容里輸入“abc.*”
          ② 同時(shí)勾選“正則表達(dá)式”復(fù)選框,然后點(diǎn)擊“全部替換”按鈕
          其中,符號(hào)的含義如下:
          “.” =匹配任意字符
          “*” =匹配0次或更多

          注意:其實(shí)就是正則表達(dá)式替換,這里只是把一些曾經(jīng)提出的問題加以整理,單純從正則表達(dá)式本身來說,就可以引申出成千上萬種特例。

          【2】正則表達(dá)式應(yīng)用——數(shù)字替換
          希望把
          asdadas123asdasdas456asdasdasd789asdasd
          替換為:
          asdadas[123]asdasdas[456]asdasdasd[789]asdasd

          在替換對(duì)話框里面,勾選“正則表達(dá)式”復(fù)選框;
          在查找內(nèi)容里面輸入“[0-9][0-9][0-9]”,不含引號(hào)
          “替換為:”里面輸入“[\0\1\2]”,不含引號(hào)
          范圍為你所操作的范圍,然后選擇替換即可。

          實(shí)際上這也是正則表達(dá)式的使用特例,“[0-9]”表示匹配0~9之間的任何特例,同樣“[a-z]”就表示匹配a~z之間的任何特例
          上面重復(fù)使用了“[0-9]”,表示連續(xù)出現(xiàn)的三個(gè)數(shù)字
          “\0”代表第一個(gè)“[0-9]”對(duì)應(yīng)的原型,“\1”代表第二個(gè)“[0-9]”對(duì)應(yīng)的原型,依此類推
          “[”、“]”為單純的字符,表示添加“[”或“]”,如果輸入“其它\0\1\2其它”,則替換結(jié)果為:

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

          功能增強(qiáng)(by jiuk2k):
          如果將查找內(nèi)容“[0-9][0-9][0-9]”改為“[0-9]*[0-9]”,對(duì)應(yīng)1 或 123 或 12345 或 …
          大家根據(jù)需要定制

          相關(guān)內(nèi)容還有很多,可以自己參考正則表達(dá)式的語法仔細(xì)研究一下

          【3】正則表達(dá)式應(yīng)用——?jiǎng)h除每一行行尾的指定字符
          因?yàn)檫@幾個(gè)字符在行中也是出現(xiàn)的,所以肯定不能用簡(jiǎn)單的替換實(shí)現(xiàn)
          比如
          12345 1265345
          2345
          需要?jiǎng)h除每行末尾的“345”
          這個(gè)也算正則表達(dá)式的用法,其實(shí)仔細(xì)看正則表達(dá)式應(yīng)該比較簡(jiǎn)單,不過既然有這個(gè)問題提出,說明對(duì)正則表達(dá)式還得有個(gè)認(rèn)識(shí)過程,解決方法如下
          解決:
          在替換對(duì)話框中,啟用“正則表達(dá)式”復(fù)選框
          在查找內(nèi)容里面輸入“345$”
          這里“$”表示從行尾匹配

          如果從行首匹配,可以用“^”來實(shí)現(xiàn),不過 EditPlus 有另一個(gè)功能可以很簡(jiǎn)單的刪除行首的字符串
          a. 選擇要操作的行
          b. 編輯-格式-刪除行注釋
          c. 在彈出對(duì)話框里面輸入要清除的行首字符,確定

          【4】正則表達(dá)式應(yīng)用——替換帶有半角括號(hào)的多行
          幾百個(gè)網(wǎng)頁中都有下面一段代碼:
          \n
          在替換對(duì)話框啟用“正則表達(dá)式”選項(xiàng),這時(shí)就可以完成替換了

          【5】正則表達(dá)式應(yīng)用——?jiǎng)h除空行
          啟動(dòng)EditPlus,打開待處理的文本類型文件。
          ①、選擇“查找”菜單的“替換”命令,彈出文本替換對(duì)話框。選中“正則表達(dá)式”復(fù)選框,表明我們要在查找、替換中使用正則表達(dá)式。然后,選中“替換范圍”中的“當(dāng)前文件”,表明對(duì)當(dāng)前文件操作。
          ②、單擊“查找內(nèi)容”組合框右側(cè)的按鈕,出現(xiàn)下拉菜單。
          ③、下面的操作添加正則表達(dá)式,該表達(dá)式代表待查找的空行。(技巧提示:空行僅包括空格符、制表符、回車符,且必須以這三個(gè)符號(hào)之一作為一行的開頭,并且以回車符結(jié)尾,查找空行的關(guān)鍵是構(gòu)造代表空行的正則表達(dá)式)。
          直接在”查找”中輸入正則表達(dá)式“^[ \t]*\n”,注意\t前有空格符。
          (1)選擇“從行首開始匹配”,“查找內(nèi)容”組合框中出現(xiàn)字符“^”,表示待查找字符串必須出現(xiàn)在文本中一行的行首。
          (2)選擇“字符在范圍中”,那么在“^”后會(huì)增加一對(duì)括號(hào)“[]”,當(dāng)前插入點(diǎn)在括號(hào)中。括號(hào)在正則表達(dá)式中表示,文本中的字符匹配括號(hào)中任意一個(gè)字符即符合查找條件。
          (3)按一下空格鍵,添加空格符。空格符是空行的一個(gè)組成成分。
          (4)選擇“制表符”,添加代表制表符的“\t”。
          (5)移動(dòng)光標(biāo),將當(dāng)前插入點(diǎn)移到“]”之后,然后選擇“匹配 0 次或更多”,該操作會(huì)添加星號(hào)字符“*”。星號(hào)表示,其前面的括號(hào)“[]”內(nèi)的空格符或制表符,在一行中出現(xiàn)0個(gè)或多個(gè)。
          (6)選擇“換行符”,插入“\n”,表示回車符。
          ④、“替換為”組合框保持空,表示刪除查找到的內(nèi)容。單擊“替換”按鈕逐個(gè)行刪除空行,或單擊“全部替換”按鈕刪除全部空行(注意:EditPlus有時(shí)存在“全部替換”不能一次性完全刪除空行的問題,可能是程序BUG,需要多按幾次按鈕)。

          1.在漢化的時(shí)候,是否經(jīng)常碰到這樣的語句需要翻譯:

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

          如果有很多類似的文件一個(gè)一個(gè)翻譯顯然很累而且感覺很無聊。

          其實(shí)可以這樣處理,在Editplus里面用 替換 功能,在替換對(duì)話框選中“正則表達(dá)式”復(fù)選框:
          查找原文件:

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

          替換成:

          Code:
          “在增加\1時(shí)發(fā)生錯(cuò)誤

          這樣替換之后發(fā)生了什么?結(jié)果是:

          Code:
          “在增加the post時(shí)發(fā)生錯(cuò)誤!”;
          “在增加the comment時(shí)發(fā)生錯(cuò)誤!”;
          “在增加the user時(shí)發(fā)生錯(cuò)誤!”;

          ok,接下來你會(huì)怎么做?當(dāng)然再替換一次把the post、the comment、the user替換成你要翻譯的詞。得到最后的結(jié)果:

          Code:
          “在增加帖子時(shí)發(fā)生錯(cuò)誤!”;
          “在增加評(píng)論時(shí)發(fā)生錯(cuò)誤!”;
          “在增加用戶時(shí)發(fā)生錯(cuò)誤!”;

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

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

          可以用這種方式:
          在Editplus里面用 替換 功能,在替換對(duì)話框選中“正則表達(dá)式”復(fù)選框:
          查找原文件:

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

          替換成:

          Code:
          無法被\1因?yàn)?

          這樣替換之后發(fā)生了什么?結(jié)果是:

          Code:
          無法被deleted因?yàn)?br /> 無法被added因?yàn)?br /> 無法被updating因?yàn)?

          其余步驟如上。

          在漢化量很大而且句式比較單調(diào)的情況下對(duì)效率的提高很明顯!

          解釋一下:([^!|"|;]*) 的意思是 不等于 ! 和 ” 和 ; 中的任何一個(gè),意思就是這3個(gè)字符之外的所有字符將被選中(替換區(qū)域);
          \1 即被選中的替換區(qū)域所在的新位置(復(fù)制到這個(gè)新位置)。

          3.經(jīng)常手工清理一行一行地刪除文本文件里面的空白行,其實(shí)可以交給Editplus更好的完成,在Editplus里面用替換功能,在替換對(duì)話框選中“正則表達(dá)式”復(fù)選框:
          查找原文件:

          Code:
          ^[ \t]*\n

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

          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.反常的,變態(tài)的
          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.反常的,變態(tài)的”,
          @@@@@”aboard”,”[2'b0:d]“,”adv.船(車)上”,

          2.
          查找: \n
          替換:
          注: 要次替換內(nèi)容為空
          效果:
          @@@@@”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.反常的,變態(tài)的”,@@@@@”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.反常的,變態(tài)的”,
          “aboard”,”[2'b0:d]“,”adv.船(車)上”,
          “abolish”,”[2'b0li6]“,”v.廢除,取消”,

          4. 任務(wù)完成



          Let life be beautiful like summer flowers and death like autumn leaves.

          posted on 2008-08-18 21:21 Alexwan 閱讀(2054) 評(píng)論(0)  編輯  收藏 所屬分類: 小筆記好文分享

          主站蜘蛛池模板: 湖北省| 根河市| 平果县| 河源市| 金寨县| 长治县| 丰县| 瑞昌市| 民丰县| 贵州省| 青海省| 天津市| 合阳县| 昌宁县| 汉寿县| 衡阳县| 林甸县| 灵石县| 莱芜市| 普陀区| 长宁区| 宜宾县| 米泉市| 龙南县| 台南县| 宁德市| 三江| 新河县| 沅陵县| 增城市| 轮台县| 大名县| 天台县| 罗源县| 板桥市| 娄烦县| 错那县| 安宁市| 钟山县| 枞阳县| 周口市|