超簡(jiǎn)單正則表達(dá)式入門教程

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

圖片來(lái)源 ComputerHope.com
1、字符位置
你可以根據(jù)文本的位置來(lái)進(jìn)行定位。比如你要搜索某個(gè)單詞,但前提是該單詞是一行中的第一個(gè)?;蛘吣憧赡苤幌氩檎夷硞€(gè)字母系列,但前提是它們出現(xiàn)在單詞的末尾。
| 字符 | 含義 | 例子 | 例子說(shuō)明 |
|---|---|---|---|
| ^ | 行首 | ^abc | 只匹配行首的abc |
| $ | 行末 | xyz$ | 只匹配行末的xyz |
| \b | 單詞邊界 | ing\b | 只匹配單詞末尾的ing |
| \B | 非單詞邊界 | \Bing | 只匹配不出在單詞開頭的ing |
| \< | 單詞開頭 | \<is | 僅在單詞開頭時(shí)匹配is |
| \> | 單詞末尾 | on\> | 僅在單詞末尾匹配on |
2、字符類別
搜索文本時(shí),僅根據(jù)字符分類來(lái)選擇字符會(huì)很有用。字符的基本類別是數(shù)字和字母和其他字符(例如空格和標(biāo)點(diǎn)符號(hào))。
| 字符 | 含義 | 例子 | 例子說(shuō)明 |
|---|---|---|---|
| . | 匹配除換行符以外的任何單個(gè)字符 | 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 | 匹配單個(gè)字母,數(shù)字或下劃線。等價(jià)于[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ù)量,例如你可以精確匹配六個(gè)空格,或定位長(zhǎng)度在四到八位之間的數(shù)字字符串。
| 含義 | 例子 | 例子說(shuō)明 | 例子說(shuō)明 |
|---|---|---|---|
| 零個(gè)或多個(gè)字符 | do*g | 匹配 dg, dog, doog 等,o 的數(shù)量為任意個(gè) | 匹配 dg, dog, doog 等,o 的數(shù)量為任意個(gè) |
| 匹配 m 個(gè)字符 | a{3} | 只能匹配 aaa | 只能匹配 aaa |
| 字符個(gè)數(shù)不少于 m個(gè),但不超過(guò)n個(gè) | 字符個(gè)數(shù)不少于 m個(gè),但不超過(guò)n個(gè),優(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、字符集和字符范圍
字符集是符合搜索條件的字符的列表,通過(guò)將一組字符括在方括號(hào)([和])中來(lái)指示字符集。
字符范圍是字符集的一種,它在字符之間使用 - 來(lái)暗示它們之間的整個(gè)字符范圍,以及開始和結(jié)束字符本身。
| 字符 | 含義 | 例子 | 例子說(shuō)明 |
|---|---|---|---|
| [characters] | 匹配括號(hào)內(nèi)列出的字符 | [abcd] | 可以匹配 a,b,c,d 單個(gè)字符 |
| [^characters] | 匹配括號(hào)內(nèi)未列出的字符 | [^abcd] | a,b,c,d 除外的任意單個(gè)字符 |
| [character-character] | 兩個(gè)字符之間范圍內(nèi)的任何字符(包括這些字符) | [a-z] | 匹配任意小寫字符 |
字符范圍可以進(jìn)行拼接,比如 [a-zA-Z0-9_] 就是匹配任意單個(gè)字母或數(shù)字。
字符范圍也可以使用數(shù)量字符,比如 [a-z]* 就可以匹配 hello, world 這樣的單詞。
.
最后說(shuō)一下,如果想匹配正則表達(dá)式中的特殊字符,比如 \, ^, *, {, [ 等,因?yàn)樗鼈冇刑厥夂x,所以需要另外加 \ 來(lái)表示,比如 \* 表示 *,\\ 表示 \。
.
再最后說(shuō)一下,在線正則表達(dá)式的網(wǎng)站有很多,我推薦我常用的一個(gè):
https://regex101.com/
除了常用的支持不同語(yǔ)言的正則表達(dá)式解析外,里面有個(gè)社區(qū),其中很多關(guān)于正則表達(dá)式的討論,還有正則表達(dá)式的測(cè)試題,通過(guò)做題來(lái)學(xué)習(xí),讓自己對(duì)正則表達(dá)式更加熟練。
最厲害的是,它會(huì)對(duì)你的正則表達(dá)式進(jìn)行解析說(shuō)明,讓你更容易看懂一長(zhǎng)串正則表達(dá)式。
比如匹配指定格式的日期:^\d{4}-\d{1,2}-\d{1,2},看不懂沒(méi)關(guān)系,這個(gè)網(wǎng)頁(yè)提供了詳細(xì)說(shuō)明:

如果覺(jué)得有用,就請(qǐng)分享到朋友圈吧!
公眾號(hào)后臺(tái)回復(fù)“目標(biāo)檢測(cè)競(jìng)賽”獲取目標(biāo)檢測(cè)競(jìng)賽經(jīng)驗(yàn)資源~

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

