1.re模組的使用方式
# 匯入re模組
import re
# 使用match方法進行匹配操作
result = re.match(正則匹配表示式,要匹配的字串)
# 如果上一步匹配到資料的話,使用group方法提取資料,否則返回none
result.group()
import re
pattern = compile(r'匹配規則', re.i)
# re.i 忽略大小寫
# re.s 表示全文匹配
pattern.match('需匹配的字串')
2.表示字元字元
功能.匹配任意字元,除了(\n)
[ ]匹配[ ]列舉的字元
\d匹配數字,即0-9
\d匹配非數字
\s匹配空格,即空格,tab建
\s匹配非空格
\w匹配單詞字元,即a-z,a-z,0-9,_
\w匹配非單詞字元
re.match(『1\d\d』,』123』)
re.match(『1[123]\d』, 123)
re.match(『1[^123]\d』, 『123』) # 在方括號裡面寫』^』,表示取反
3.表示數量字元
功能*匹配前乙個字元出現0次或者無限次
+匹配前乙個字元出現1次或者無限次
?匹配前乙個字元出現1次或者0次
匹配前乙個字元出現m次
匹配前乙個字元至少出現m次
匹配前乙個字元出現從m次到n次
re.match(『1[13578]/d』,』13345678901』)
4.原始字串
# 在字串中如果出現'\',需要使用原始字串進行匹配
re.match(r'\\nabc', '\\nabc')
5.表示邊界字元
功能^匹配字串開頭
$匹配字串結尾
\b匹配乙個單詞的邊界
\b匹配非單詞邊界
re.match(r』^1[35678]\d$』,』18111111111』)
re.match(r』^\w+\s\bve\b』, 『ho ve r』)
re.match(r』^.+ve\b』, 『ho ver』)
6.匹配分組字元
功能(?p<』name』>)
分組起別名
(?p=name)
引用分組名為name分組匹配到的字串 字元
功能|匹配左右任意乙個表示式
(ab)
將括號中字元作為乙個分組
\num
引用分組num匹配到的字串,如\2,\1
# 匹配1-100之間的數字
re.match(r'[1-9]\d?$|0$|100$', '85')
re.match(r'[1-9]?/d?$|100$', '85')
s = ''
result = re.match(r'', s)
result.group()
result.group(1)
result.groups()
結果為:
'匹配分組'
'匹配分組'
('匹配分組',)
s = '
're.match(r'<(.+)><(.+)>.+', s)
s = '
're.match(r'<(?p.+)><(?p.+)>.+', s)
7.re的高階用法
re.match() # 從起始位置開始往後查詢,返回第乙個符合規則的,只匹配一次
re.search() # 從任何位置開始往後查詢,返回第乙個符合規則的,只匹配一次
re.findall() # 所有的全部匹配,返回列表
re.finditer() # 所有的全部匹配,返回的是乙個迭代器
re.split() #分割字串,返回列表
re.sub() # 替換
(1)search
s = 'itcast'
re.sub(r'', '', s)
結果為:
靜夜思窗前明月光
(4)split
s = 'itcast,php,python-cpp'
re.split(r':|,|-|', s)
結果為:
['itcast', 'php', 'python', 'cpp']
8.貪婪模式和非貪婪模式
python裡數量詞預設是貪婪的,總是嘗試匹配盡可能多的字元
非貪婪則相反,總是嘗試匹配盡可能少的字元
在』*』, 『?』, 『+』,』』後面加上』?』,使得貪婪模式變成非貪婪模式
# 貪婪模式下
s = 'this is a number 234-456-789'
r = re.match(r'(.+)(\d+-\d+-\d+)', s)
r.groups()
結果為:
# 檢測到d+有乙個數字就可以完成匹配
('this is a number 23', '4-456-789')
# 非貪婪模式下
s = 'this is a number 234-456-789'
r = re.match(r'(.+?)(\d+-\d+-\d+)', s)
r.groups()
結果為:
('this is a number ', '234-456-789')
9.練習
提取**前面的一部分
結果為;
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...