2013年2月26日 星期二

notepad++ 取代 文字處理 Regular Expression

最近常常遇到幾次要大量修改文字檔的經驗,

有時候是把電子書的多餘文字修改掉,

有時候是程式語言原始碼等問題,

因為notepad++取代功能很強大,

所以就在這邊留下紀錄。

因為notepad++上使用的是Regular Expressions

複雜的略過,有興趣可以看 http://twpug.net/modules/smartsection/item.php?itemid=28

常用的 regexp 符號可以大致分為三類:

1. 比對 「一個字元」 的符號:
* [...] ... 當中任何一個字元
* [^...] 除了 ... 之外的任何一個字元
* . 任何一個字元
2. 具有 「定位」 功能, 但本身不吃掉任何字元的 anchor:
* ^... 以 ... 開頭的字串
* ...$ 以 ... 結尾的字串
* \b 文數字/非文數字 的邊界。
3. 計數用, 表達 「前面那個東西重複出現多少次」 的 quantifier:
* {5} 重複 5 次
* {3,7} 重複 3 到 7 次
* ? 可有可無 (0 次或 1 次)
* * 重複出現任意次, 包含 0 次
* + 重複出現任意次, 至少 1 次


那以下是我在VTK上用到的一小段程式碼~
//==================================

vtkSmartPointer mapOutline =

vtkSmartPointer::New();



vtkSmartPointer outline =

vtkSmartPointer::New();
//==================================
我要把把vtkSmartPointer mapOutline 前面的vtkSmartPointer 給去掉

以及等號(=)後面兩個換行符號去掉。

1.首先先找出vtkSmartPointer 

這邊我取代的方法是vtkSmartPointer<(.)*>把這段找出來

<(.)>是指在<>中有一個自元的格式
*則是複數,就是說<>中間字元數不限

找到後把她取代成空白

2.換行符號則是搜尋\r\n
\n : Newline character
\r : Carriage return.

以上是簡單的方式,還有更多的資料在http://www.emeditor.com/help/howto/search/search_regexp_syntax.htm

利用增強模式及用類型表是真是非常方便的功能~~~(大心)

再舉一個例子,分離網頁原始碼的網址
譬如:
href="https://docs.google.com/file/d/0B7M3FCZX61g-SlVyRUliMnFKWWs/edit?usp=sharing" target="_blank" target="_blank">
GOOGLE空間  href="http://cht.tw/x/e48am" target="_blank"
我想挑出其中的http://的內容,然後傳給下載工具批次下載(當然很多下載工具已經可以自動判斷了)
我的作法是
1.把 > 取代成 \r\n (分段用,實際嘗試的時候發現分段會很有幫助)
2.\r\n(.)*
3.把"(*)\r\n 取代為 \r\n
4.把(.)*\r\nhttp取代為http
重複第四步即可找出網址

-----------------------------------
熟練後發現有更好的解法~

譬如上述例子

首先把href="取代成空白
在把".*\r\n.*"取代成空白 網址就出來了 速度超快















沒有留言: