"""re模組與正規表示式之間的關係
正規表示式不是python獨有的 而它是一門獨立的技術在任何語言中都可以見到它只不過運用的的方法不一樣
所有的程式語言都可以使用正則
但是你如果想在python中使用 那麼你就要依賴與re模組
正則的介紹
正則就是用來篩選字串中特定的內容
乙個正則就可以寫成一本書所以可見這正則是有多麼的千變萬化
書名:正則指引
正則的應用場景
1.爬蟲
2.資料分析
在python中只要是reg .....開頭的東西一般情況下都是和正則有關係的
1 想匹配具體內容 可以直接寫完整的內容,不需要寫正則
字元組 乙個字串裡面的表示式都是或的關係
^與$符連用會精準的限制匹配的內容
兩者之間寫什麼 那麼匹配的字元就必須是什麼
多乙個不行少乙個也不行
adc|ad 一定要將長的放在最前面
^ 直接寫在外面的 限制字串的開頭
[^] 除了寫的字元不要其他的都要
正則匹配的時候預設都是貪婪匹配(盡量匹配的多)
在這個時候你可以通過在量詞後面加乙個?號就可以將貪婪匹配程式設計非貪婪匹配(就是盡量的往少了匹配)
量詞必須跟在正則負號後面
量詞只能能夠限制挨著他的那個正則負號
分組: 當多個正則負符號需要重複多次的時候或者當做乙個乙個整體進行其他的操作,那麼可以分組形式
分組在正則中的語法就是()括號
python 中使用正則必須借助於re模組 或者是支援正則表達書寫方式
import re
re模組中常用的三種方式
findall
search
match
----------------
三種模式的使用以及介紹使用的方式
1.findall
res = re.findall(res = re.findall('[a-z]+','eva egon jason')
findall('正規表示式','帶匹配的字串')
print(res)
找出字串中符合正規表示式全部內容 並且返回的是乙個列表,列表中的元素就是正則匹配到的結果
2search
res = re.search('a','eva egon jason')
print(res) # search不會給你直接返回匹配到的結果 而是給你返回乙個物件
print(res.group()) # 必須呼叫group才能看到匹配到的結果
注意: 1.search只會依據正則拆一次只要查到結果了 就不會再往後查詢了
2.當查詢的結果不存在的情況年 呼叫group直接回報錯
下面這樣的表達方式不會出錯 如果呼叫沒有的話group()回返回none
res = re.search("a","eva egon jason")
#格式search("正規表示式","帶匹配的字串")
if res:
print(res.group())
3.match
1.match只會匹配字串開頭到的部分
2.當字串不符合匹配的情況下返回的也是none 呼叫group也會報錯
res = re.match('a','eva egon jason')
print(res)
print(res.group())
不常用的re內建方法
1.split
ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在對''和'bcd'分別按'b'分割
print(ret) # ['', '', 'cd'] 返回的還是列表
2.sub
ret = re.sub('\d', 'h', 'eva3egon4yuan4',1) # 將數字替換成'h',引數1表示只替換1個
sub('正規表示式','新的內容','待替換的字串',n)
先按照正規表示式查詢所有符合該表示式的內容 統一替換成'新的內容' 還可以通過n來控制替換的個數
print(ret) # evahegon4yuan4
3.subn
ret = re.subn('\d', 'h', 'eva3egon4yuan4') # 將數字替換成'h',返回元組(替換的結果,替換了多少次)
ret1 = re.subn('\d', 'h', 'eva3egon4yuan4',1) # 將數字替換成'h',返回元組(替換的結果,替換了多少次)
print(ret) # 返回的是乙個元組 元組的第二個元素代表的是替換的個數
4.compile
obj = re.compile('\d') #將正規表示式編譯成為乙個 正規表示式物件,規則要匹配的是3個數字
ret = obj.search('abc123eeee') #正規表示式物件呼叫search,引數為待匹配的字串
res1 = obj.findall('347982734729349827384')
print(ret.group()) #結果 : 123
print(res1) #結果 : ['347', '982', '734', '729', '349', '827', '384']
import re
5.finditer
ret = re.finditer('\d', 'ds3sy4784a') #finditer返回乙個存放匹配結果的迭代器
print(ret) # print(next(ret).group()) # 等價於ret.__next__()
print(next(ret).group()) # 等價於ret.__next__()
print(next(ret).group()) # 等價於ret.__next__()
print(next(ret).group()) # 等價於ret.__next__()
print(next(ret).group()) # 等價於ret.__next__()
print(next(ret).group()) # 等價於ret.__next__() 查出迭代取值的範圍 直接報錯
print(next(ret).group()) #檢視第乙個結果
print(next(ret).group()) #檢視第二個結果
print([i.group() for i in ret]) #檢視剩餘的左右結果
import re
# res = re.search('^[1-9](\d)(\d[0-9x])?$','110105199812067023')
# 還可以給某乙個正規表示式起別名
# res = re.search('^[1-9](?p\d)(?p\d[0-9x])?$','110105199812067023')
# print(res.group())
# print(res.group('password'))
# print(res.group(1))
# print(res.group('username'))
# print(res.group(2))
# print(res.group(2))
# print(res.group(1))
re模組與正規表示式
正規表示式,又稱正規表示式 正規表示法 正規表示式 規則表示式 常規表示法 英語 regular expression,在 中常簡寫為regex regexp或re 是電腦科學的乙個概念。正規表示式使用單個字串來描述 匹配一系列匹配某個句法規則的字串。在很多文字編輯器裡,正規表示式通常被用來檢索 替...
re模組與正規表示式
re模組與正規表示式的關係 正規表示式是一門獨立的技術,所有的程式語言都可以使用,但是如果想在python中使用,就必須依賴於re模組。正則就是用來篩選特定內容的表示式,在python中 一般情況下 reg都是與正則有關 如果想匹配具體的內容,可以直接寫完整的內容,不需要寫正則。字元組 乙個字串裡面...
正規表示式與re模組
一,正規表示式 正規表示式本身與python沒什麼關係,就是匹配字串內容的一種規則,只和字串相關。定義 正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特殊字元 及這些特殊字元的組合,組合乙個 規則字串 這個 規則字串 用來表達對字串的一種過濾邏輯。1,字元組,字元組 在同一位置可能出現...