超簡單正則表達式入門教程

極市導讀
本文介紹了一些正則表達式的規(guī)則。 >>加入極市CV技術交流群,走在計算機視覺的最前沿
學習正則表達式的唯一方法就是 Learning by doing。
正則表達式是在程序或命令行中查找和替換文本的強大工具。熟悉最常見的正則表達式符號,以及如何使用它們,對于程序員來說是必不可少的技能。
正則表達式是在搜索中需要匹配的特殊字符串,使用范圍很廣,比如Java、Python等編程語言,grep、sed等命令行,還有vscode、vim等編輯器。
正則表達式的規(guī)則太多了,學會后不怎么用就又忘了,介紹各種規(guī)則前先分享給你一張圖,
強烈建議你點贊收藏,然后每天看一眼,肯定記得比誰都牢。

圖片來源 ComputerHope.com
1、字符位置
你可以根據(jù)文本的位置來進行定位。比如你要搜索某個單詞,但前提是該單詞是一行中的第一個。或者你可能只想查找某個字母系列,但前提是它們出現(xiàn)在單詞的末尾。
| 字符 | 含義 | 例子 | 例子說明 |
|---|---|---|---|
| ^ | 行首 | ^abc | 只匹配行首的abc |
| $ | 行末 | xyz$ | 只匹配行末的xyz |
| \b | 單詞邊界 | ing\b | 只匹配單詞末尾的ing |
| \B | 非單詞邊界 | \Bing | 只匹配不出在單詞開頭的ing |
| \< | 單詞開頭 | \<is | 僅在單詞開頭時匹配is |
| \> | 單詞末尾 | on\> | 僅在單詞末尾匹配on |
2、字符類別
搜索文本時,僅根據(jù)字符分類來選擇字符會很有用。字符的基本類別是數(shù)字和字母和其他字符(例如空格和標點符號)。
| 字符 | 含義 | 例子 | 例子說明 |
|---|---|---|---|
| . | 匹配除換行符以外的任何單個字符 | ab.def | 可以匹配如 abcdef, ab9def, ab=def 等 |
| \s | 匹配空白字符(例如空格,制表符等) | abcd\se | 匹配 abcd e 和 abcd(tab)e |
| \S | 匹配非空白字符 | \S\S\s\S | 可以匹配如 AB D, 12(tab)3 等 |
| \w | 匹配單個字母,數(shù)字或下劃線。等價于[a-zA-Z0-9_] | \w\{1,\}-\w\{1,} | 可以匹配如 well-wishes, far-fetched 等 |
| \W | \w 的取反,可以表示為 [^\w] | \w\W\w | 可以匹配如 a@b,5-3 等 |
| \d | 匹配數(shù)字字符 0-9 | \d\d | 匹配所有兩位數(shù)字 |
| \D | 匹配非數(shù)字字符 | \D\d | 匹配 s0, ^4 等 |
3、字符數(shù)量
匹配字符的數(shù)量,例如你可以精確匹配六個空格,或定位長度在四到八位之間的數(shù)字字符串。
| 含義 | 例子 | 例子說明 | 例子說明 |
|---|---|---|---|
| 零個或多個字符 | do*g | 匹配 dg, dog, doog 等,o 的數(shù)量為任意個 | 匹配 dg, dog, doog 等,o 的數(shù)量為任意個 |
| 匹配 m 個字符 | a{3} | 只能匹配 aaa | 只能匹配 aaa |
| 字符個數(shù)不少于 m個,但不超過n個 | 字符個數(shù)不少于 m個,但不超過n個,優(yōu)先匹配 n 次 | 只能匹配 b, bb, bbb | 只能匹配 b, bb, bbb |
| 至少出現(xiàn) m 次 | 至少出現(xiàn) m 次 | c{2,} | 匹配 cc, ccc, cccc 等 |
| 匹配0次或1次,優(yōu)先匹配1次 | cd? | 只能匹配 c, cd | |
| + | 匹配1-n次,優(yōu)先匹配n次 | sd+ | 匹配 sd, sdd, sddd 等 |
4、字符集和字符范圍
字符集是符合搜索條件的字符的列表,通過將一組字符括在方括號([和])中來指示字符集。
字符范圍是字符集的一種,它在字符之間使用 - 來暗示它們之間的整個字符范圍,以及開始和結束字符本身。
| 字符 | 含義 | 例子 | 例子說明 |
|---|---|---|---|
| [characters] | 匹配括號內(nèi)列出的字符 | [abcd] | 可以匹配 a,b,c,d 單個字符 |
| [^characters] | 匹配括號內(nèi)未列出的字符 | [^abcd] | a,b,c,d 除外的任意單個字符 |
| [character-character] | 兩個字符之間范圍內(nèi)的任何字符(包括這些字符) | [a-z] | 匹配任意小寫字符 |
字符范圍可以進行拼接,比如 [a-zA-Z0-9_] 就是匹配任意單個字母或數(shù)字。
字符范圍也可以使用數(shù)量字符,比如 [a-z]* 就可以匹配 hello, world 這樣的單詞。
.
最后說一下,如果想匹配正則表達式中的特殊字符,比如 \, ^, *, {, [ 等,因為它們有特殊含義,所以需要另外加 \ 來表示,比如 \* 表示 *,\\ 表示 \。
.
再最后說一下,在線正則表達式的網(wǎng)站有很多,我推薦我常用的一個:
https://regex101.com/
除了常用的支持不同語言的正則表達式解析外,里面有個社區(qū),其中很多關于正則表達式的討論,還有正則表達式的測試題,通過做題來學習,讓自己對正則表達式更加熟練。
最厲害的是,它會對你的正則表達式進行解析說明,讓你更容易看懂一長串正則表達式。
比如匹配指定格式的日期:^\d{4}-\d{1,2}-\d{1,2},看不懂沒關系,這個網(wǎng)頁提供了詳細說明:

如果覺得有用,就請分享到朋友圈吧!
公眾號后臺回復“目標檢測競賽”獲取目標檢測競賽經(jīng)驗資源~

# CV技術社群邀請函 #
備注:姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)
即可申請加入極市目標檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術交流群
每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~

