正則表達式

字符組

 

字符組:[字符組],在同一個位置可能出現的各類字符組成了一個字符組,在正則表達式中用[]表示字符分爲不少類,好比數字、字母、標點等等。
假如一個位置"只能出現一個數字",那麼這個位置上的字符只能是0、一、2...9這10個數之一。在線測試工具

正則html

待匹配字符python

匹配
結果正則表達式

說明工具

[0123456789]測試

8spa

Truecode

在一個字符組裏枚舉合法的全部字符,字符組裏的任意一個字符
和"待匹配字符"相同都視爲能夠匹配htm

[0123456789]blog

aip

False

因爲字符組中沒有"a"字符,因此不能匹配

 

[0-9]

 

7

True

也能夠用-表示範圍,[0-9]就和[0123456789]是一個意思

 

[a-z]

 

s

 

True

 

一樣的若是要匹配全部的小寫字母,直接用[a-z]就能夠表示

 

[A-Z]

 

B

 

True

 

[A-Z]就表示全部的大寫字母

 

[0-9a-fA-F]

 

e

 

True

 

能夠匹配數字,大小寫形式的a~f,用來驗證十六進制字符

 經常使用元字符

 

代碼 說明
. 匹配除換行符之外的任意字符
\w 匹配字母或數字或下劃線
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
a|b 匹配字符a或b
() 匹配括號內的表達式,也表示一個組

\s所指的空白符包括space \t 以及\n

\b*匹配以*開頭的單詞,*\b則匹配以*結尾的單詞

. ^ $

 

正則 待匹配字符 匹配
結果
說明
海. 海燕海嬌海東 海燕海嬌海東   匹配全部"海."的字符
^海. 海燕海嬌海東 海燕 只從開頭匹配"海."
  海.$   海燕海嬌海東 海東 只匹配結尾的"海.$"

經常使用限定符

 

代碼/語法 說明
* 重複零次或更屢次
+ 重複一次或更屢次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更屢次
{n,m} 重複n到m次

* + ? { }

 

正則 待匹配字符 匹配
結果
說明
李.? 李傑和李蓮英和李二棍子

李傑
李蓮
李二

 
?表示重複零次或一次,即只匹配"李"
後面一個任意字符
 
李.* 李傑和李蓮英和李二棍子 李傑和李蓮英和李二棍子
*表示重複零次或屢次,即匹配"李"
後面0或多個任意字符
李.+ 李傑和李蓮英和李二棍子 李傑和李蓮英和李二棍子
+表示重複一次或屢次,即只匹配"李"
後面1個或多個任意字符
李.{1,2} 李傑和李蓮英和李二棍子

李傑和
李蓮英
李二棍

{1,2}匹配1到2次任意字符

注意:前面的*,+,?等都是貪婪匹配,也就是儘量匹配,後面加?號使其變成惰性匹配

 

正則 待匹配字符 匹配
結果
說明
李.*? 李傑和李蓮英和李二棍子

惰性匹配

經常使用反義詞

 

代碼/語法 說明
\W 匹配任意不是字母,數字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數字的字符
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x之外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母之外的任意字符

[ ] 只要出如今中括號內的內容均可以被匹配
[^] 只要不出如今中括號中的內容均可以被匹配
有一些有特殊意義的元字符進入字符組中會回覆它原本的意義 : . | [ ] ( )

字符集[][^]

 

正則 待匹配字符 匹配
結果
說明
李[傑蓮英二棍子]* 李傑和李蓮英和李二棍子

李傑
李蓮英
李二棍子

 
表示匹配"李"字後面[傑蓮英二棍子]的字符任意次
 
李[^和]* 李傑和李蓮英和李二棍子

李傑
李蓮英
李二棍子

表示匹配一個不是"和"的字符任意次
[\d] 456bdha3

4
5
6
3

表示匹配任意一個數字,匹配到4個結果
[\d]+ 456bdha3

456
3

表示匹配任意個數字,匹配到2個結果

分組 ()與 或 |[^]

 

身份證號碼是一個長度爲15或18個字符的字符串,若是是15位則所有🈶️數字組成,首位不能爲0;若是是18位,則前17位所有是數字,末位多是數字或x,下面咱們嘗試用正則來表示:

正則 待匹配字符 匹配
結果
說明
^[1-9]\d{13,16}[0-9x]$ 110101198001017032

110101198001017032

   表示能夠匹配一個正確的身份證號
^[1-9]\d{13,16}[0-9x]$ 1101011980010170

1101011980010170

表示也能夠匹配這串數字,但這並非一個正確
的身份證號碼,它是一個16位的數字
^[1-9]\d{14}(\d{2}[0-9x])?$ 1101011980010170

False

如今不會匹配錯誤的身份證號了
()表示分組,將\d{2}[0-9x]分紅一組,就能夠
總體約束他們出現的次數爲0-1次
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ 110105199812067023

110105199812067023

表示先匹配[1-9]\d{16}[0-9x]若是沒有
匹配上就匹配[1-9]\d{14}

轉義符

在正則表達式中,有不少有特殊意義的是元字符,好比\d和\s等,若是要在正則中匹配正常的"\d"而不是"數字"就須要對"\"進行轉義,變成'\\'。

在python中,不管是正則表達式,仍是待匹配的內容,都是以字符串的形式出現的,在字符串中\也有特殊的含義,自己還須要轉義。因此若是匹配一次"\d",字符串中要寫成'\\d',那麼正則裏就要寫成"\\\\d",這樣就太麻煩了。這個時候咱們就用到了r'\d'這個概念,此時的正則是r'\\d'就能夠了。

貪婪匹配

貪婪匹配:在知足匹配時,匹配儘量長的字符串,默認狀況下,採用貪婪匹配

正則 待匹配字符 匹配
結果
說明
<.*>

<script>...<script>

<script>...<script>
默認爲貪婪匹配模式,會匹配儘可能長的字符串
<.*?> r'\d'  

<script>
<script>

加上?爲將貪婪匹配模式轉爲非貪婪匹配模式,會匹配儘可能短的字符串
*? 重複任意次,但儘量少重複
+? 重複1次或更屢次,但儘量少重複
?? 重複0次或1次,但儘量少重複
{n,m}? 重複n到m次,但儘量少重複
{n,}? 重複n次以上,但儘量少重複

. 是任意字符
* 是取 0 至 無限長度
? 是非貪婪模式。
何在一塊兒就是 取儘可能少的任意字符,通常不會這麼單獨寫,他大多用在:
.*?x

就是取前面任意長度的字符,直到一個x出現

文章來源:女神的博客

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息