notepad++中使用正則表達式
notepad中正則表達式的語法
首先,注意Notepad++正則表達式字符串最長不能超過69個字符。
第二,notepad中的正則表達式語法與通用的正則表達式語法以及python re模塊中支持的正則表達式語法都沒有沒有實質區別,列舉如下:
-
\轉義字符 如:要使用 “\” 本身, 則應該使用“\” -
\tTab制表符 注:擴展和正則表達式都支持 -
\r回車符CR 注:擴展支持,正則表達式不支持 -
\n換行符LF 注:擴展支持,正則表達式不支持 -
\r\n正則表達式可表示回車換行 -
.匹配任意一個字符 -
^其右邊的表達式被匹配在行首。如:^A匹配以“A”開頭的行 -
$其左邊的表達式被匹配在行尾。如:e$匹配以“e”結尾的行 -
|或運算符,匹配表達式左邊和右邊的字符串。如: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”;\r?\n匹配行結尾符 -
()影響表達式匹配的順序(類似C++的小括號會影響表達式運算順序),並且用作表達式的分組標記(標記從1開始)如:([a-z]bc)smn\1匹配“tbcsmntbc”;另見:看下文的示例 -
{}指定前面的字符或分組的出現次數 如:abc{3}匹配abccc;a(bc){2}匹配abcbc -
\d匹配一個數字字符。等價於:[0-9] -
\D \d取反,匹配一個非數字字符。等價於:[^0-9] -
\s匹配任意單個空白字符:包括空格、制表符等(注:不包括換車符和換行符)。等價於:[ \t] -
\S \s取反的任意單個字符。 -
\w匹配包括下划線的任意單個字符。等價於:[A-Za-z0-9_] -
\W \w取反的任意單個字符。等價於:[^A-Za-z0-9_] -
\b匹配單詞起始處或結尾處
notepad中常用的正則表達式類
下表中列舉的內容,左側pattern 或者meaning列中的冒號后面的表達式,都可以用於在notepad 查找窗口中的正則表達式模式下的查找目標,就可以匹配相應的內容。
| Pattern | Meaning |
|---|---|
[[:alpha:]] |
匹配一個英文字母: [A-Za-z] |
[[:digit:]] |
匹配一個數字: [0-9] |
[[:xdigit:]] |
匹配一個十六進制數字: [0-9A-Fa-f] |
[[:alnum:]] |
匹配一個字母數字: [0-9A-Za-z] |
[[:lower:]] |
匹配一個小寫英文字母: [a-z] |
[[:upper:]] |
匹配一個大寫英文字母: [A-Z] |
[[:blank:]] |
匹配一個空白(空格或者制表符):[ \t] |
[[:space:]] |
匹配一個空白符:[ \t\r\n\v\f] |
[[:graph:]] |
匹配一個圖形字符: [\x21-\x7E] |
[[:print:]] |
匹配可打印字符(圖形字符和空格) |
[[:cntrl:]] |
匹配控制(control)字符 |
[[:punct:]] |
匹配一個標點字符:[-!"#$%&'()*+,./:;<=>?@[]_`{ |
notepad中查找窗口的關於正則表達式的參數說明
-
正則表達式的選中點:表示你在查找中輸入的內容是一個正則表達式
-
匹配新行的復選框:如果如果選中該復選框,則表示使用點時,不是針對每一行而是針對整個文檔進行搜索。大多數的使用場景下,不勾選該復選框。
notepad正則表達式不能選擇匹配內容
注意:notepad++ 不支持匹配提取。 一般操作正則表達式主要是用來匹配查找、匹配替換。
這個提取問題可以使用sublime text來進行實現, SublimeText可以選中所有匹配項。
另外EmEditor也可以選中正則表達式的匹配項,但是EmEditor這個軟件不是開源的,也不是免費的,所以推薦還是使用sublime text。
notepad正則表達式使用舉例
正則表達式提取分隔符前的內容
舉例:notepad文檔中的輸入內容如下(注意以下每行結尾都有換行符CR|LF)
libX11-1.6.5
lksctp-tools-1.0.17
mailcap-2.1.41
ctrl H, 查找目標輸入 ([^-]*).*
替換為輸入,\1
點擊全部替換后的結果為
libX11
lksctp
mailcap
正則表達式替換一個分隔符為換行符
原始文檔為
libX11;lksctp;mailcap;
ctrl H, 查找目標輸入 ;
替換為輸入,\r\n
點擊全部替換后的結果為
libX11CR|LF
lksctpCR|LF
mailcapCR|LF
刪除多余的空行
原始文檔內容為
libX11CR|LF
CR|LF
CR|LF
lksctpCR|LF
CR|LF
mailcapCR|LF
目標是,刪除多余的空行。
ctrl H, 查找目標為\r\n\r\n,
替換為輸入\r\n
點擊全部替換,全部替換也需要多點擊2次,就可以看到所有的空行被刪除了。
替換后結果為:
libX11CR|LF
lksctpCR|LF
mailcapCR|LF
正則匹配並按匹配組進行替換
正則表達式支持帶標記的表達式(tagged expressions)。使用(和)包圍要標記的文本,然后在替換字符串中使用\ 1替換第一個匹配的文本,用\ 2替換第二個匹配的文本,即可完成此操作。舉例如下:
| Text body | Search string | Replace string | Result |
|---|---|---|---|
| Hi my name is Fred | my name is (.+) | my name is not \1 | Hi my name is not Fred |
| The quick brown fox jumped over the fat lazy dog | brown (.+) jumped over the (.+) | brown \2 jumped over the \1 | The quick brown fat jumped over the fox lazy dog |
