目錄:
python正則化,一、筆記
二、我的自學路線
三、筆記目錄
一、筆記
① 正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。
② 正則表達式中包含兩個部分,一個是正則語法對應的字符,二個是普通字符,例如:fullmatch(正則表達式字符串,字符串) - - > 判斷正則表達式和字符串是否完全匹配。
③ 正則表達式字符串:就是一個字符串,字符串中是正則表達式語法,即 r'正則表達式'。
④ 正則表達式檢查字符串滿不滿足條件,滿足的話就返回對象,不滿足條件就為空。
⑤ 正則表達式的用處:1. 判斷字符串是否滿足某個條件.....判斷輸入的字符是否是郵箱/手機號碼。是否是ip地址。
2. 提取滿足條件的字符串。
3. 字符串替換。
⑥ compile函數根據一個模式字符串和可選的標志參數生成一個正則表達式對象。該對象擁有一系列方法用于正則表達式匹配和替換。
⑦ re模塊提供了與這些方法功能完全一致的函數,這些函數使用一個模式字符串做為它們的第一個參數,re模塊使Python語言擁有全部的正則表達式功能,
⑧ re.match()嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
#coding=utf-8
import re
# 一個 .(點)為只能匹配一個任意字符
pattern = r'a.b' # 匹配三個字符,左邊是a,右邊是b,中間為任意字符(除換行符以外,都可以),如果是四個字符就匹配不成功
result1 = re.fullmatch(pattern,'a|b') # fullmatch()為完全匹配,即正則表達式與需要匹配的字符串,模式要完全相等
result2 = re.fullmatch(pattern,'a|b1')
print(result1) # 字符串滿足正則表達式返回對象,不滿足為空。
print(result2) # span = [0,3) 是一個左閉右開的索引,result1.span() 為索引兩端元素組成的元組
print(type(result1))
print(type(result2))
print(result1,result1.span(),result1.group()) # result1.group()為匹配的結果,它是一個字符串類型
運行結果:
None
(0, 3) a|b
#coding=utf-8
import re
# 一個\w匹配一個字符是字母或數字或下劃線的字符
pattern = r'\w...'
result1 = re.fullmatch(pattern,r'a*cb')
result2 = re.fullmatch(pattern,r'4\nb')
result3 = re.fullmatch(pattern,r'_(qb')
result4 = re.fullmatch(pattern,r'*\nb')
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
if result3:
print(result3,result3.span(),result3.group())
else:
print(result3)
if result4:
print(result4,result4.span(),result4.group())
else:
print(result4)
運行結果:
(0, 4) a*cb
(0, 4) 4\nb
(0, 4) _(qb
None
#coding=utf-8
import re
# 一個\W匹配一個字符是非字母或非數字或非下劃線的字符
pattern = r'\W...'
result1 = re.fullmatch(pattern,r'a*cb')
result2 = re.fullmatch(pattern,r'4\nb')
result3 = re.fullmatch(pattern,r'_(qb')
result4 = re.fullmatch(pattern,r'*\nb')
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
if result3:
print(result3,result3.span(),result3.group())
else:
print(result3)
if result4:
print(result4,result4.span(),result4.group())
else:
print(result4)
運行結果:
None
None
None
(0, 4) *\nb
#coding=utf-8
# 一個\b不會去匹配一個字符,而是單純的檢測\b出現的位置是否是單詞邊界
# 單詞邊界: 字符串開始和結尾、空格、換行、標點符號等,可以將兩個單詞隔開的字符都單詞邊界
pattern1 = r'\babc' # 匹配字符串abc中的a為單詞邊界,abc是拿來匹配的單詞
pattern2 = r'abc\b\saaa' # 匹配字符串abc中的c為單詞邊界,因為后接空格,沒有單詞
# 一個 \s 字符匹配一個空白字符,空白字符: 空格、制表符(\t)、回車(換行\n)等,都輸入空白字符
result1 = re.fullmatch(pattern1, 'abc aaa') # 雖然abc出現字符串的開頭,但是由于用fullmatch,沒有完全匹配的字符串,返回也是空
result2 = re.fullmatch(pattern2, 'abc aaa') # 用 pattern = r'abc\saaa' 也可以匹配到
print(result1)
print(result2)
運行結果:
None
import re
# []表示匹配括號中出現的任意一個字符
pattern = r'a[abc]c' # 把中括號里面當做一個字符,只要是a或b或c,都可以匹配到
result1 = re.fullmatch(pattern,'aac')
result2 = re.fullmatch(pattern,'abc')
result3 = re.fullmatch(pattern,'acc')
result4 = re.fullmatch(pattern,'adc')
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
if result3:
print(result3,result3.span(),result3.group())
else:
print(result3)
if result4:
print(result4,result4.span(),result4.group())
else:
print(result4)
運行結果:
(0, 3) aac
(0, 3) abc
(0, 3) acc
None
import re
# []表示匹配括號中出現的任意一個字符
pattern = r'a[ab\dc]c' # \d表示任意數字,只要是a或b或c或任意數字,都可以匹配到
result1 = re.fullmatch(pattern,'a4c')
result2 = re.fullmatch(pattern,'abc')
result3 = re.fullmatch(pattern,'a*c')
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
if result3:
print(result3,result3.span(),result3.group())
else:
print(result3)
運行結果:
(0, 3) a4c
(0, 3) abc
None
# +號表示一個或以上個字符,都可以匹配到
pattern = r'a[\d]+c'
result1 = re.fullmatch(pattern,'a42323c')
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
運行結果:
(0, 7) a42323c
pattern = r'a[\d+]c' # 表示數字或+號,都可以匹配到
result1 = re.fullmatch(pattern,'a4c')
result2 = re.fullmatch(pattern,'a+c')
result3 = re.fullmatch(pattern,'a4+c')
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
if result3:
print(result3,result3.span(),result3.group())
else:
print(result3)
運行結果:
(0, 3) a4c
(0, 3) a+c
None
# {} 表示指定次數,{N}為匹配N次,{M,N}為匹配M到N次,{M,}為至少匹配M次,{,M}為最多匹配N次
pattern = r'a\d*d{3}c' # *號表示零個或以上個字符,都可以匹配到,這里指匹配到3次d
result1 = re.fullmatch(pattern,'adddc') # 零個數字字符
result2 = re.fullmatch(pattern,'a3dddc') # 一個數字字符
result3 = re.fullmatch(pattern,'a348dddc') # 三個數字字符
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
if result3:
print(result3,result3.span(),result3.group())
else:
print(result3)
運行結果:
(0, 5) adddc
(0, 6) a3dddc
(0, 8) a348dddc
# () 表示分組,它有以下三個特點:
# 1. 組合,將括號中的內容作為一個整體進行操作
# 2. 捕獲,使用帶括號的正則表達式匹配成功后,只獲取括號中的內容。
# 3. 重復,在正則表達式中可以通過\數字來重復前面()中匹配到的結果。數字代表前第幾個分組。
# 組合
import re
pattern = r'(\d[a-zA-Z]){3}a' # 這里將數字字母當做一個整體,匹配三次
result1 = re.fullmatch(pattern,'3A2s9ua') # 當運用fullmatch時,正則表達式和匹配的字符串,模式要完全相同
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
pattern = r'(\d[a-zA-Z]){3}a'
result2 = re.fullmatch(pattern,'3A2s9uac') # 不匹配,當運用fullmatch時,正則表達式和匹配的字符串,模式要完全相同,這里多了一個字符
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
運行結果:
(0, 7) 3A2s9ua
None
# () 表示分組,它有以下三個特點:
# 1. 組合,將括號中的內容作為一個整體進行操作
# 2. 捕獲,使用帶括號的正則表達式匹配成功后,只獲取括號中的內容。
# 3. 重復,在正則表達式中可以通過\數字來重復前面()中匹配到的結果。數字代表前第幾個分組。
# 捕獲
import re
re_str = r'(\d{3})abc'
print(re.fullmatch(re_str, '773abc'))
print(re.findall(re_str, 'euhasdhf873abcssjsja235abcu-03s834432abcjjsks')) # 只提取括號內的內容,組成一個列表
運行結果:
['873', '235', '432']
# () 表示分組,它有以下三個特點:
# 1. 組合,將括號中的內容作為一個整體進行操作
# 2. 捕獲,使用帶括號的正則表達式匹配成功后,只獲取括號中的內容。
# 3. 重復,在正則表達式中可以通過\數字來重復前面()中匹配到的結果。數字代表前第幾個分組。
# 重復
import re
re_str = r'([a-z]{3})-(\d{2})\2' # \2替換第二組內容,也就是相當于 re_str = r'([a-z]{3})-(\d{2})(\d{2})'
print(re.fullmatch(re_str, 'hsn-2323'))
運行結果:
import re
pattern = r'([a-z]{3})-(\d{2})\2\1\2' # \2表示(\d{2})再重復一次,"-"僅只是一個匹配的減號符號
result1 = re.fullmatch(pattern,'hsn-2323hsn23')
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
運行結果:
(0, 13) hsn-2323hsn23
# \表示轉義符號
# 正則表達式中可以通過在特殊的符號前加\,來讓特殊的符號沒有意義.
# 中括號中有特殊功能的符號,只代表符號本身,不需要轉義字符\
# ()需要轉義
import re
pattern = r'\+b\>\\' # \就是使得\后面的字符為需要匹配的字符,即要匹配 +b>\ 的形式的字符
result1 = re.fullmatch(pattern,'+b>\\') # 這里同樣需要在字符串\前面加\
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
運行結果:
(0, 4) +b>\
import re
pattern = r'\)' # \就是使得\后面的字符為需要匹配的字符
result2 = re.fullmatch(pattern,')') # 非\的字符串時,不能再在前面加\,如果加轉義字符\會報錯
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
運行結果:
(0, 1) )
print('www.163\ncom')
print('www.163\\ncom') # 只有加\,字符串里面的后面的\沒有意義,\n才會都顯示出來。
print('I\'m a student') # 不報錯
#print('I'm a student') # 報錯,兩個單引號結束字符串內容
運行結果:
www.163
com
www.163\ncom
I'm a student
# compile(正則表達式字符串) 將正則表達式字符串轉換成正則表達式對象,可以直接調用正則表達式對象的方法
pattern = re.compile(r'\d+')
print(pattern)
print(pattern.fullmatch('23456')) # 不是用re.fullmatch 因為compile把它正則表達式字符串轉換為對象了,對象就有一系列方法了
運行結果:
re.compile('\\d+')
# fullmatch(正則表達式字符串,字符串)
# 用正則表達式完全匹配字符串(匹配整個字符串),返回匹配對象或None
# match(正則表達式字符串,字符串)
# 用正則表達式匹配字符串開頭,返回匹配對象或者None
pattern = r'\d([a-zA-Z]+)12'
result1 = re.match(pattern,'2sdAc123') # 返回的是匹配到的對象
result2 = re.match(pattern,'h2sdAc123') # 沒有匹配到,第一個字符都沒匹配到,后面就不會看了
if result1:
print(result1,result1.span(),result1.group())
else:
print(result1)
if result2:
print(result2,result2.span(),result2.group())
else:
print(result2)
運行結果:
(0, 7) 2sdAc12
None
import re
result1 = re.match(r'\d([a-zA-Z]+)12','2sdAc123')
print(dir(result1)) # 可以查詢對象有哪些方法
運行結果:
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'end', 'endpos', 'expand', 'group', 'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 'span', 'start', 'string']
import re
result = re.fullmatch(r'\d([a-zA-Z]+)123', '2hjdsh123')
print(result)
print(result.span(0)) # span(group=0) 獲取整個字符串匹配成功的區間(左閉右開區間)
print(result.start(1)) # 里面的1表示與第一個分組匹配到的開始下標,也就是子表達式閉區間的值
print(result.end(1)) # 里面的1表示與第一個分組匹配到的結束下標,也就是子表達式開區間的值
運行結果:
(0, 9)
1
6
# group()/group(0) --> 獲取正則表達式完全匹配的結果
# group(index>0) --> 獲取正則表達式中第group個分組匹配到的結果
import re
result = re.fullmatch(r'\d([a-zA-Z]+)123', '2hjdsh123')
print(result)
print('0:',result.group())
print('1:',result.group(1))
運行結果:
0: 2hjdsh123
1: hjdsh
# 對象.string --> 獲取被匹配的原字符串
import re
result = re.match(r'\d([a-zA-Z]+)123', '2hjdh123ABC')
print('match:',result)
print(result.string)
運行結果:
match:
2hjdh123ABC
# search:查找字符串中滿足正則表達式的第一個字符串,返回值是匹配對象或者None。
import re
result1 = re.search(r'\d([a-zA-Z]+)12','eee2cdADCd1223') # 返回的是匹配到的對象
if result1:
print(result1)
運行結果:
# findall:獲取字符串中字符串中滿足正則表達式的所有的子串,返回一個列表。
# 如果正則表達式中有分組,取值的時候只取分組中匹配到的結果。
# 如果有多個分組,會將每個分組匹配到的結果作為一個元組的元素。
import re
result1 = re.findall(r'\d([a-zA-Z]+)12','eee2cdADCd1223mkKSD129s') # 有一個分組,僅返回分組中匹配到的對象
if result1:
print(result1)
運行結果:
['cdADCd', 'mkKSD']
import re
result1 = re.findall(r'\d[a-zA-Z]+12','eee2cdADCd1223mkKSD129s') # 沒有分組,返回的是匹配到的對象
if result1:
print(result1)
運行結果:
['2cdADCd12', '3mkKSD12']
# finditer:查找所有滿足正則條件的子串,返回值是迭代器,迭代器中的元素是匹配對象
import re
result1 = re.finditer(r'\d[a-zA-Z]+12','eee2cdADCd1223mkKSD129s')
if result1:
print(result1) # result1 是一個迭代器
for i in result1: # i 不是一個迭代器,是迭代器里面的元素,元素為對象
print(i,i.span(),i.group(0))
運行結果:
(3, 12) 2cdADCd12
(13, 21) 3mkKSD12
# split(正則表達式,字符串) 將字符串按照滿足正則表達式條件的子串進行分割
str1 = 'adsd23d2DS-DSAD2dsd+dsn2-dsa2DFaw1'
result1 = re.split(r'[-+]',str1) # 用+或-來切分,如果直接用字符串的str1.split('+') 則只能用一種形式來切分
print(result1)
運行結果:
['adsd23d2DS', 'DSAD2dsd', 'dsn2', 'dsa2DFaw1']
# sub(正則表達式,repl,字符串) --> 將字符串中滿足正則表達式條件的子串替換成repl。返回替換后的字符串
str1 = 'hsj8jskfh98ssjj8hshh'
result = re.sub(r'\d+','*', str1)
print(result)
運行結果:
hsj*jskfh*ssjj*hshh
二、我的自學路線
01 安裝Python編輯器 [ 已整理 ]
02 Python編譯器快捷鍵 [ 已整理 ]
03 Python基礎 [ 已整理 ]
04 Python難點 [ 整理ing ]
05 Python常用的庫 [ 整理ing ]
06 爬蟲 [ 看視頻ing ]
三、筆記目錄
1) Python 編輯器
2) Python 基礎
03) Python 難點
( ……更多筆記,見專欄 )
"?我的筆記,希望對你有幫助?"
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态