正则只能出现特定字符_python正则表达式的简单使用总结
生活随笔
收集整理的這篇文章主要介紹了
正则只能出现特定字符_python正则表达式的简单使用总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
原文作者:小哲,雷鋒網(wǎng)
在編程中,經(jīng)常會涉及到字符串的操作,一個常用的策略就是利用split函數(shù),然后對于特定的字符串進(jìn)行匹配,但是這種方法格式復(fù)雜,可復(fù)用性較差。
正則表達(dá)式是處理字符串匹配一個必不可少的方法,定義一個語義規(guī)則,來進(jìn)行特定的字符字符串的規(guī)則。
正則表達(dá)式速查表
1 元字符,用特殊符號表示一類元素
| . | 匹配除換行符以外的任意字符(這是一個小紅點(diǎn)兒) | a.c | abc |
| \w | 匹配字母或數(shù)字或下劃線 (可以記成 word ) | a\wc | a2c |
| \b | 匹配一個單詞的邊界 | foo\b | 匹配foo,foo. 但不匹配foobar |
| \B | 匹配空字符串,但 不 能在詞的開頭或者結(jié)尾 | py\B | 匹配python py2 py3, 但不匹配py. |
| ^ | 匹配字符串的開始 | ^abc | abc |
| \W | 匹配非字母數(shù)字下劃線 | a\Wb | a b |
| \d | 匹配數(shù)字 (可記成 digit ) | a\dc | a2c |
| \D | 匹配非數(shù)字 | a\Dc | abc |
| \s | 匹配任意的空白符 (可以記成 space ) | a\sb | a b |
| \S | 匹配非空白符 | a\Sb | acb |
| a|b | 匹配字符a或字符b。(長的寫前面,短的寫后面) | abc|def | abc 或def |
| () | 匹配括號內(nèi)的表達(dá)式,也表示一個組 | (abc) | abc |
| [...] | 匹配字符組中的字符 | a[bcd]e | abe 或ace或ade |
| [^...] | 匹配除了字符組中字符的所有字符 | a[bcd]e | ase |
2 字符組 [],限制范圍,某個位置只能出現(xiàn)這個范圍內(nèi)的某個元素。
| [0123456789] | 只能匹配0-9數(shù)字,可寫成[0-9] | [0123456789] | 0或1或2... |
| [a-z] | 只能匹配小寫字母 | [a-z] | d |
| [A-Z] | 只能匹配大寫字母 | [A-Z] | D |
| [0-9a-fA-F] | 可以匹配16進(jìn)制的某個數(shù) | [0-9a-fA-F] | D |
3 量詞,表示數(shù)量,約束前面元字符出現(xiàn)的次數(shù)。
| * | 重復(fù)前一個字符零次或多次 | abc* | ab 或abccc |
| + | 重復(fù)前一個字符一次或多次 | abc+ | abc 或abccc |
| ? | 重復(fù)前一個字符零次或一次 | abc? | ab 或abc |
| {n} | 重復(fù)前一個字符n次 | abc{3} | abccc |
| {n,} | 重復(fù)前一個字符至少n次 | abc{3,} | abccccc |
| {n,m} | 重復(fù)前一個字符n到m次 | abc{1,5} | abc或abcc或abccccc |
re模塊包函數(shù)
# 導(dǎo)入包import re################re.compile() 編譯# 將正則表達(dá)式編譯成一個正則表表達(dá)式對象。# 如果一個正則表達(dá)式在程序中只用一次,就沒必要編譯了。# 如果同一個正則表達(dá)式要被多次使用時,就需要對表達(dá)式進(jìn)行編譯,以便后續(xù)使用。例如:匹配www.baidu.com
pattern = r'w*\.[a-z]{5}\.[a-z]*'
prog = re.compile(pattern)
string = 'www.baidu.com'
result = prog.match(string)# 如果匹配成功返回match對象,不成功返回None###################re.findall() 返回列表# 一、re.findall(正則表達(dá)式,待匹配的字符串,flags=0)# 二、findall默認(rèn)只顯示分組中的,分組有優(yōu)先級。
pattern = r'w{3}\.(baidu|oldboy)\.com'
prog = re.compile(pattern)
ret = re.findall(prog, 'www.baidu.com')
print(ret)# 結(jié)果:['baidu']# 三、加上 ?: 取消分組的優(yōu)先# ret = re.findall('www\.(?:baidu|oldboy)\.com', 'www.baidu.com')# print(ret)# 結(jié)果:['www.baidu.com']###################re.match()#從頭匹配
re.match(pattern, string, flags=0)#如果 string 開始的0或者多個字符匹配到了正則表達(dá)式樣式,就返回一個相應(yīng)的 匹配對象 。如果沒有匹配,就返回 None ;#需要group(),才能返回值###################re.search()#掃描整個 字符串 找到匹配樣式的第一個位置,并返回一個相應(yīng)的 匹配對象。如果沒有匹配,就返回一個 None ;注#同樣需要group(),才能的返回值####################re.sub()、re.subn()# re.sub()
re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE) # 【表達(dá)式表示替換內(nèi)容,要替換的新元素,替換對象,替換次數(shù)】# 結(jié)果為:'Baked Beans & Spam'# re.subn()
re.subn(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE) # 【返回元組,前面是替換完的結(jié)果,后面是替換的次數(shù)】
結(jié)果是('Baked Beans & Spam', 1)
總結(jié)
以上是生活随笔為你收集整理的正则只能出现特定字符_python正则表达式的简单使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车贴膜从哪里刮起?
- 下一篇: 位运算java_Java中的位运算