一、元字元
字元組是元字元中的乙個。在字元組中所有的字元都可以匹配任意乙個字元位置上能出現的內容,如果在字串中有任意乙個字元是字元組中的內容,那麼就是匹配上的項。
[0-9] [a-z] [a-z] ascii編碼小的值,指向乙個大的值
# \d表示匹配乙個數字 [0-9]
元字元:
\w word匹配字母和數字、下劃線 \d digit \s space \n next \t tab \w \d \s
^開始 $結尾 \b 匹配邊界
[^] 字元組相關的
| 或() 分組
. 匹配除了換行符之外的任意字元
二、量詞
?0次或1次,+1次或多次 *0次或多次 n次 n次或多次 n次或m次
\d+整數
\d+\.\d+ 小數
\d+\.\d+|\d+ 整數或者小數 \d+(\.\d+)?
# 貪婪匹配 : 正則會盡量多的幫我們匹配# 預設貪婪 回溯演算法
# 非貪婪匹配 :會盡量少為我們匹配
# 量詞?表示非貪婪 惰性匹配
# .*?x 表示匹配任意長度任意字元遇到乙個x就立即停止
元字元注意事項:元字元 量詞
元字元 量詞 ? 在量詞的範圍內盡量少的匹配這個元字元
分組 對某些固定的內容做量詞約束
或 把長的放前面
轉義符pattern = r'\\n'
s = r'\n'
轉義:使用 \或r轉義三、re模組
3.1 findall
importre#findall
ret = re.findall('
\d+','
sgy93shd2183y0')
(ret)
結果:['93
', '
2183
', '
0']
引數 正規表示式 待匹配的字串3.2 search返回值 是乙個列表 所有匹配到的項
沒有匹配到會返回乙個空列表
如果遇到分組,findall會優先顯示分組中的內容
(?:正規表示式)取消分組優先
importre#search
ret = re.search('
\d+','
sgy93shd2183y0')
(ret)
(ret.group())
結果:<_sre.sre_match object; span=(3, 5), match='
93'> # 物件
93
返回值 : 返回乙個sre_match物件 ,沒有匹配到會返回none,沒有.group()方法。如果有分組,通過索引取各分組中的內容通過group去取值
且只包含第乙個匹配到的值
findall 有個特點,會優先顯示分組中的內容。優先前面的
importsearch的特點:
match 驗證使用者輸入的內容
ret = re.match('\d+','
25ahs293djjk293sahf2938u')
(ret) # <_sre.sre_match object; span=(0, 2), match='25'>
print(ret.group()) # 25
檢視字串開始位置的數字是多少,索引分別是多少。
分割split的用法
import res = '
alex8123egon1120boss_jin
'ret = re.split('
\d+'
,s)print(ret) #
['alex', 'egon', 'boss_jin']
ret = re.split('
(\d+)
',s) #
(\d)+ \d\d\d\d\d...(\d)
print(ret) #
['alex', '8123', 'egon', '1120', 'boss_jin']
ret = re.split('
\d(\d)
',s)
print(ret) #
['alex', '1', '', '3', 'egon', '1', '', '0', 'boss_jin']
替換subs = 'alex|egon|boss|jin
'print(s.replace('
|','')) #
alexegonbossjin
s1 = '
alex8123egon1120boss_jin626356
'ret = re.sub('
\d+','|'
,s1)
print(ret) #
alex|egon|boss_jin|
ret = re.sub('
\d+','
|',s1,1)
(ret)
#alex|egon1120boss_jin626356 替換一次
ret = re.subn('
\d+','|'
,s1)
print(ret) #
('alex|egon|boss_jin|', 3) 元組,並顯示次數
compile 編譯正則規則
importrecom = re.compile('
\d+') #
制定正則規則
ret = com.search('
abc1cde2fgh3skhfk')
print(ret.group()) #
1ret = com.findall('
abc1cde2fgh3skhfk')
print(ret) #
['1', '2', '3']
ret = com.finditer('
abc1cde2fgh3skhfk')
for i in
ret:
print(i.group()) #
1 2 3
finditer 節省空間的方法
ret = re.finditer('\d+','
abc1cde2fgh3skhfk')
(ret)
for i in
ret:
print(i.group()) # 逐個取值
四、分組命名、分組約束
當我們需要取 \函式 中的內容時,需要用到分組命名:
pattern = '<(?p.*?)>.*?
'ret = re.search(pattern,'')
(ret) # <_sre.sre_match object; span=(0, 11), match=''>
ifret:
(ret.group()) #
print(ret.group(1)) # h1
print(ret.group('
tag')) # h1
可以去除類似 標籤對
直接用\1也是可以的
pattern = r'<(.*?)>.*?
'ret = re.search(pattern,'函式'
(ret) # <_sre.sre_match object; span=(0, 11), match=''>
ifret:
(ret.group()) #
print(ret.group(1)) # h1
re模組與正規表示式
正規表示式,又稱正規表示式 正規表示法 正規表示式 規則表示式 常規表示法 英語 regular expression,在 中常簡寫為regex regexp或re 是電腦科學的乙個概念。正規表示式使用單個字串來描述 匹配一系列匹配某個句法規則的字串。在很多文字編輯器裡,正規表示式通常被用來檢索 替...
re模組與正規表示式
re模組與正規表示式的關係 正規表示式是一門獨立的技術,所有的程式語言都可以使用,但是如果想在python中使用,就必須依賴於re模組。正則就是用來篩選特定內容的表示式,在python中 一般情況下 reg都是與正則有關 如果想匹配具體的內容,可以直接寫完整的內容,不需要寫正則。字元組 乙個字串裡面...
正規表示式與re模組
一,正規表示式 正規表示式本身與python沒什麼關係,就是匹配字串內容的一種規則,只和字串相關。定義 正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特殊字元 及這些特殊字元的組合,組合乙個 規則字串 這個 規則字串 用來表達對字串的一種過濾邏輯。1,字元組,字元組 在同一位置可能出現...