python正则表达式修饰符_python正则表达式,看完这篇文章就够了...
今天講什么?
今天以為大學同學微信聊,說最近在看我的公眾號,她是國企汽車制造業的,但也要用python進行數據分析...之前看了往期的python字符串操作內容,里面說到了正則表達式,想學習一下... 正則表達式這東西,你說它簡單它也簡單,你說它難吧,確實不容易。為什么?這東西就是死記硬背的。背過了相關的語法,使用起來就so easy。但記不熟語法,就犯難了。網上關于python正則的帖子很多,我再去寫壓力比較大,盡可能的總結詳細一些吧!
正則表達式簡介正則表達式,是一個特殊的字符序列,又稱規則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp 或RE),本質而言是一種小型的,高度專業化的編程語言。 Python 自1.5版本起增加了re 模塊,re 模塊使Python語言擁有全部的正則表達式功能。
正則語法表
關于正則語法表,別想其他的都背過就行了。不管你是python還是其他的語言都是一樣的,所以背不過就抄到記住為止!這個你背不過,再好的教程看了也沒用。如何巧記?我們需要對其進行分類。開頭結尾
這一對標簽,大家都不會陌生...
|模式 | 描述 | |--------|--------| | ^ | 從整個字符串開頭的地方匹配 | | $ | 從整個字符串的結尾開始匹配 |模糊匹配
|模式 | 描述 | |--------|--------| | . | 匹配任意字符,除了換行符 | |re?|重復匹配?號前面0個或1個由前面的正則表達式定義的片段,非貪婪方式| |re|重復匹配號前面0個或多個的表達式。| |re+|重復匹配+號前面1個或多個的表達式。| |a丨b|匹配a或b|關于括號
|模式 | 描述 | |--------|--------| | {} | 表示匹配"{}"前邊的字符 指定個數為"{}"里邊的數值 | | [] | 表示一個字符集,它常被用來指定一個字符類別,字符可以單個列出,也可以用“-”號分隔的兩個給定字符來表示一個字符區間 | | () | 分組 將括號中的內容 當作整體來對待 |"\" 反斜杠的應用
|模式 | 描述 | |--------|--------| |\w|匹配字母數字及下劃線| |\W|匹配非字母數字及下劃線| |\s|匹配任意空白字符,等價于 [\t\n\r\f].| |\S|匹配任意非空字符| |\d|匹配任意數字,等價于 [0-9].| |\D|匹配任意非數字| |\A|匹配字符串開始| |\Z|匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。| |\z|匹配字符串結束| |\G|匹配最后匹配完成的位置。| |\b|匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。| |\B|匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。| |\n, \t, 等.|匹配一個換行符。匹配一個制表符。等| |\1...\9|匹配第n個分組的內容。| |\10|匹配第n個分組的內容,如果它經匹配。否則指的是八進制字符碼的表達式。|其他
|模式 | 描述 | |--------|--------| |(?imx)|正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區域。| |(?-imx)|正則表達式關閉 i, m, 或 x 可選標志。只影響括號中的區域。| |(?: re)|類似 (...), 但是不表示一個組| |(?imx: re)|在括號中使用i, m, 或 x 可選標志| |(?-imx: re)|在括號中不使用i, m, 或 x 可選標志| |(?#...)|注釋.| |(?= re)|前向肯定界定符。如果所含正則表達式,以 ... 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。| |(?! re)|前向否定界定符。與肯定界定符相反;當所含表達式不能在字符串當前位置匹配時成功| |(?> re)|匹配的獨立模式,省去回溯。|
re模塊用法re.(function)(pattern[, flags]) pattern : 一個字符串形式的正則表達式 flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為: 1. re.I 忽略大小寫 2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環境 3. re.M 多行模式 4. re.S 即為 . 并且包括換行符在內的任意字符(. 不包括換行符) 5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數據庫 6. re.X 為了增加可讀性,忽略空格和 # 后面的注釋findall() (即:全部找到,返回的是一個列表)findall(string[, pos[, endpos]]) 參數: 1. string : 待匹配的字符串。 2. pos : 可選參數,指定字符串的起始位置,默認為 0。 3. endpos : 可選參數,指定字符串的結束位置,默認為字符串的長度。
import re
s = 'helloworld hellobeijing'
ret = re.findall('hello\S+',s)
print(ret)
['helloworld', 'hellobeijing']finditer()和 findall 類似,在字符串中找到正則表達式所匹配的所有子串,并把它們作為一個迭代器返回。 re.finditer(pattern, string, flags=0) 參數:
| 參數 | 描述 | |--------|--------| |pattern| 匹配的正則表達式| |string |要匹配的字符串。| |flags |標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等|search() 與 match()
相同點:語法:re.search/match(pattern, string, flags=0)
函數參數說明:
| 參數| 描述 | |--------|--------| | pattern |匹配的正則表達式| |string | 要匹配的字符串。| |flags |標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等|可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
|匹配方法 |描述| |--------|--------| |group(num=0)|匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組| |groups()|返回一個包含所有小組字符串的元組,從 1 到 所含的小組號| |start([group]) |方法用于獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引),參數默認值為 0| |end([group]) |方法用于獲取分組匹配的子串在整個字符串中的結束位置(子串最后一個字符的索引+1),參數默認值為 0| |span([group]) |方法返回 (start(group), end(group)|
import re
# re.search
ret = re.search('h..','hello hello world')
print(ret) # 輸出結果:<_sre.sre_match object span="(0," match="hel">
ret1 = re.search('h..','hello hello world').group()
print(ret1) # 輸出結果:hel 只輸出第一個符合條件的結果
# re.match
ret = re.match('asd','asdhskdjfksji')
print(ret) # 輸出結果:<_sre.sre_match object span="(0," match="asd">返回的是一個對象。
ret1 = re.match('asd','asdhskdjfasdksjiasd').group()
print(ret1) # 輸出結果:asd 調用.group()方法,只返回匹配的第一個結果。
不同點: 1. re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None 2. re.search匹配整個字符串,直到找到一個匹配
# re.search
s = 'helloworld hellobeijing'
ret = re.search('hellob\S+',s)
print(ret)
# re.match
s = 'helloworld hellobeijing'
ret = re.match('hellob\S+',s)
print(ret)
Nonesplit() 分隔符 對比字符串里邊的split方法。split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
| 參數 | 描述 | |--------|--------| |pattern |匹配的正則表達式| |string |要匹配的字符串。| |maxsplit |分隔次數,maxsplit=1 分隔一次,默認為 0,不限制次數。| |flags |標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。參見:正則表達式修飾符 - 可選標志|
import re
s = 'helloworld hellobeijing'
ret = re.split('hello',s)
print(ret)
['', 'world ', 'beijing']sub() 替換;類似字符串中的replace()方法。re.sub用于替換字符串中的匹配項。 語法: re.sub(pattern, repl, string, count=0, flags=0) 參數: 1. pattern : 正則中的模式字符串。 2. repl : 替換的字符串,也可為一個函數。 3. string : 要被查找替換的原始字符串。 4. count : 模式匹配后替換的最大次數,默認 0 表示替換所有的匹配。
import re
s = 'helloworld hellobeijing'
ret = re.sub('hello','goodbye',s)
print(ret)
goodbyeworld goodbyebeijingcompile(strPattern[,flag]): 這個方法是Pattern類的工廠方法,用于將字符串形式的正則表達式編譯為Pattern對象compile 函數用于編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。 語法格式為: re.compile(pattern[, flags]) 參數: pattern : 一個字符串形式的正則表達式 1. flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為: 2. re.I 忽略大小寫 3. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環境 4. re.M 多行模式 5. re.S 即為 . 并且包括換行符在內的任意字符(. 不包括換行符) 6. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數據庫 7. re.X 為了增加可讀性,忽略空格和 # 后面的注釋
import re
pattern = re.compile('he.{3}')
pattern.match(s)
The End
今天的內容就到這里,歡迎關注我的微信公眾號【清風Python】謝謝。
總結
以上是生活随笔為你收集整理的python正则表达式修饰符_python正则表达式,看完这篇文章就够了...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: phpstudy一直自动停止启动_php
- 下一篇: 图片不能置于底层怎么办_PPT中常遇到的