本質是對字符串的處理,正則表達式描述的是一種字符串匹配的模式。簡而言之,用具備一定特征意義的表達式對字符串進行檢查,將符合條件的子字符串提取出來。
導入模塊
import re
一、單字符匹配
match(表達式,匹配對象):匹配某個字符串
import re
text = 'python'
result = re.match('py',text)
print(result.group())
>>> py
1.從起始位置進行匹配
2.只能匹配某個,并且返回的結果是object => 使用group()方法進行打印
3.匹配不到,不會報錯,返回None
.?:匹配任意的某個字符
import re
text = '1python'
result = re.match('.',text)
print(result.group())
>>> 1
1.無法匹配換行符
2.從起始位置進行匹配
\d:匹配任意的某個數字
從起始位置進行匹配
import re
text = '1python'
result = re.match('\\d',text)
print(result.group())
或
import re
text = '1python'
result = re.match(r'\d',text)
print(result.group())
>>> 1
\D:除數字外均可匹配
從起始位置進行匹配
import re
text = '_python'
result = re.match(r'\D',text)
print(result.group())
>>> _
\s:匹配空白字符
1.從起始位置進行匹配
2.\n \t \r 空格都表示空白字符
import re
text = '\npython'
result = re.match(r'\s',text)
print(result.group())
\w:匹配小寫的a-z、大寫的A-Z,數字和下劃線
import re
text = '_python'
result = re.match(r'\w',text)
print(result.group())
>>> _
\W:匹配除小寫\w之外的所有字符
eg. —
[]:表示組合方式,只要在中括號內的內容均可匹配(取或)
1.從起始位置進行匹配
2.[] 內多個匹配內容時,取"或",只要匹配對象中含有其中一個內容就匹配
import re
text = '?-python'
result = re.match('[-?]',text)
print(result.group())
>>> ?
二、多字符匹配
*:匹配零個或者多個字符
import re
text = '151-1234-5678'
result = re.match(r'[\d]*',text)
print(result.group())
>>> 151
+:匹配一個或者多個(至少有一個)
import re
text = 'a151-1234-5678'
result = re.match(r'[a\d]+',text)
print(result.group())
>>> a151 (匹配到不滿足條件為止)
?:要么匹配0個,要么匹配1個
import re
text = '-a151-1234-5678'
result = re.match(r'[-a\d]?',text)
print(result.group())
>>> - (最多讓你匹配一個)
{m}:匹配指定個數m
import re
text = '-151-1234-5678'
result = re.match(r'[-\d]{2}',text)
print(result.group())
>>> -1
{m,n}:匹配m到n個(默認匹配最多次)
import re
text = '-151-1234-5678'
result = re.match(r'[-\d]{2,4}',text)
print(result.group())
>>> -151
三、匹配規則的替代方案
1. \d ->> [0-9]:匹配所有的數字
2. \D ->> [^0-9]:匹配所有的非數字
3. \w ->> [0-9a-zA-Z_]:匹配所有的數字、字母和下劃線
4. \W ->> [^0-9a-zA-Z_]:匹配所有的非數字、字母和下劃線
5. [\d\D]、[\w\W]:匹配所有的字符
四、特殊匹配
[.]+:[.],表示的是僅表示匹配點(.),配合+,即匹配. 一次或多次
五、特殊匹配進階
從頭匹配
re.match:必須從字符串開頭進行匹配,一旦起始位置出錯,便報錯
全局遍歷
re.search:從左到右進行字符串的遍歷,找到就返回,后續再次出現,但也不再返回結果
^:中括號內表示取反;中括號外表示以指定的字符開始
$:表示以...為結尾
| :匹配多個表達式或者字符串
六、貪婪模式與非貪婪模式
貪婪模式:正則表達式會盡可能多地匹配字符【默認就是貪婪模式】
非貪婪模式:正則表達式會盡可能少地匹配字符?【添加?】