re正則模塊--未完

re正則模塊

一:什么是正則景埃?

正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法崖疤⊙龉冢或者說:正則就是用來描述一類事物的規(guī)則。(在Python中)它內(nèi)嵌在Python中轻腺,并通過 re 模塊實現(xiàn)乐疆。正則表達式模式被編譯成一系列的字節(jié)碼,然后由用 C 編寫的匹配引擎執(zhí)行贬养。

生活中處處都是正則:

? 比如我們描述:4條腿

?   你可能會想到的是四條腿的動物或者桌子挤土,椅子等

? 繼續(xù)描述:4條腿,活的

? 就只剩下四條腿的動物這一類了

二:常用匹配模式(元字符)

1036857-20170529203214461-666088398-1.jpg

匹配模式

一對一匹配

print('hello'.replace('h','qw'))
# qwello
print('hello'.find('lo'))
# 3     # 匹配到的位置

正則匹配

import re
h="""hello alex 66"""

# \w 匹配字母數(shù)字及下劃線
# \W 匹配非字母數(shù)字下劃線
print(re.findall('\w',h))
> ['h', 'e', 'l', 'l', 'o', 'a', 'l', 'e', 'x', '6', '6', '6']
print(re.findall('\W',h))
> [' ', ' ']

# \s 匹配任意空白字符误算,等價于[\t\n\r\f]
# \S 匹配任意非空字符
print(re.findall('\s',h))
print(re.findall('\S',h))
print(re.findall('\s','hello \n alex \t 666\\n'))
> [' ', ' ']
> ['h', 'e', 'l', 'l', 'o', 'a', 'l', 'e', 'x', '6', '6', '6']
> [' ', '\n', ' ', ' ', '\t', ' '] #\n \t都可以被\s匹配 \\ 表示轉(zhuǎn)義

# \d 匹配任意數(shù)字仰美,等價于[0-9]
# \D 匹配任意非數(shù)字
print(re.findall('\d',h))
print(re.findall('\D',h))
> ['6', '6', '6']
> ['h', 'e', 'l', 'l', 'o', ' ', 'a', 'l', 'e', 'x', ' ']

# \A 匹配字符串開始
# \z 匹配字符串結(jié)束
# \Z 匹配字符串結(jié)束,如果是存在換行儿礼,只匹配到換行前的結(jié)束字符串
# ^ 匹配字符串的開頭
# $ 匹配字符串的末尾
print(re.findall('\Ahe',h)) # \A==>^
print(re.findall('^he',h))
print(re.findall('66\Z',h)) # \Z==>$
print(re.findall('66$',h))
> ['he']
> ['he']
> ['66']
> ['66']

重復匹配:| . | * | ? | .* | .*? | + | {n,m} |

import re
# . 匹配任意字符串咖杂,除了換行符,當re.DOTALL標記被指定時蚊夫,則可以匹配包括換行符的任意字符
print(re.findall('a.b','a1b')) #['a1b']
print(re.findall('a...b','aw1qb'))  # ['aw1qb']
print(re.findall('a.b','a1b a*b a b aaab')) #['a1b', 'a*b', 'a b', 'aab']
print(re.findall('a.b','a\nb')) #[]
print(re.findall('a.b','a\nb',re.S)) #['a\nb']
print(re.findall('a.b','a\nb',re.DOTALL)) #['a\nb']同上一條意思一樣

# [...] 用來表示一組字符嚎花,單獨列出:[amk]匹配'a','m'或'k'
print(re.findall('[a,m,k]','[amkwweq]'))
# [^...] 不在[]中的字符骑脱,[^abc]匹配除了a,b,c之外的字符。
print(re.findall('[^abc]','abcde'))
# * 匹配0個或多個的表達式
print(re.findall('ab*e*','abbbbbee abbeqeq'))
# + 匹配1個或多個的表達式
print(re.findall('ab+','a')) #[]
print(re.findall('ab+','abbb')) #['abbb']

# ? 匹配0個或1個由前面的正則表達式定義的字段,非貪婪式
print(re.findall('ab?','a')) #['a']
print(re.findall('ab?','abbb')) #['ab']
#匹配所有包含小數(shù)在內(nèi)的數(shù)字
print(re.findall('\d+\.?\d*',"asdfasdf123as1.13dfa12adsf1asdf3")) #['123', '1.13', '12', '1', '3']

#.*默認為貪婪匹配
print(re.findall('a.*b','a1b22222222b')) #['a1b22222222b']
# {n} 精確匹配n個前面表達式
print(re.findall('ab{2}','abbb')) #['abb']

# {n,m} 匹配n到m次由前面的正則表達式定義的字段巩那,貪婪模式
print(re.findall('ab{2,4}','abbb')) #['abbb']
print(re.findall('ab{1,}','abbb')) #['abbb']    # 'ab{1,}' ===> 'ab+'
print(re.findall('ab{0,}','abbb')) #['abbb']    # 'ab{0,}' ===> 'ab*'

# a|b 匹配a或b
print(re.findall('a|b','esdaqwbe')) # ['a', 'b']

# () 匹配括號內(nèi)的表達式囤热,也表示一個組
print(re.findall('(qwe)','eqweee')) # ['qwe']

#[]
print(re.findall('a[1*-]b','a1b a*b a-b')) #[]內(nèi)的都為普通字符了炸枣,且如果-沒有被轉(zhuǎn)意的話搭伤,應該放到[]的開頭或結(jié)尾
print(re.findall('a[^1*-]b','a1b a*b a-b a=b')) #[]內(nèi)的^代表的意思是取反,所以結(jié)果為['a=b']
print(re.findall('a[0-9]b','a1b a*b a-b a=b')) #[]內(nèi)的^代表的意思是取反乍桂,所以結(jié)果為['a=b']
print(re.findall('a[a-z]b','a1b a*b a-b a=b aeb')) #[]內(nèi)的^代表的意思是取反冲杀,所以結(jié)果為['a=b']
print(re.findall('a[a-zA-Z]b','a1b a*b a-b a=b aeb aEb')) #[]內(nèi)的^代表的意思是取反,所以結(jié)果為['a=b']

#\# print(re.findall('a\\c','a\c')) #對于正則來說a\\c確實可以匹配到a\c,但是在python解釋器讀取a\\c時睹酌,會發(fā)生轉(zhuǎn)義权谁,然后交給re去執(zhí)行,所以拋出異常
print(re.findall(r'a\\c','a\c')) #r代表告訴解釋器使用rawstring忍疾,即原生字符串闯传,把我們正則內(nèi)的所有符號都當普通字符處理谨朝,不要轉(zhuǎn)義
print(re.findall('a\\\\c','a\c')) #同上面的意思一樣卤妒,和上面的結(jié)果一樣都是['a\\c']

#():分組
print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab
print(re.findall('(?:ab)+123','ababab123')) #findall的結(jié)果不是匹配的全部內(nèi)容字币,而是組內(nèi)的內(nèi)容,?:可以讓結(jié)果為匹配的全部內(nèi)容
print(re.findall('href="(.*?)"','<a ]
print(re.findall('href="(?:.*?)"','<a ]

#|
print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))

re模塊提供的方法介紹

未完待續(xù)

推薦博客:https://blog.csdn.net/yufenghyc/article/details/51078107

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末则披,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洗出,更是在濱河造成了極大的恐慌士复,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阱洪,居然都是意外死亡便贵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門冗荸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來承璃,“玉大人,你說我怎么就攤上這事蚌本】猓” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵程癌,是天一觀的道長舷嗡。 經(jīng)常有香客問我,道長嵌莉,這世上最難降的妖魔是什么进萄? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮烦秩,結(jié)果婚禮上垮斯,老公的妹妹穿的比我還像新娘。我一直安慰自己只祠,他們只是感情好兜蠕,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抛寝,像睡著了一般熊杨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盗舰,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天晶府,我揣著相機與錄音,去河邊找鬼钻趋。 笑死川陆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蛮位。 我是一名探鬼主播较沪,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼失仁!你這毒婦竟也來了尸曼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤萄焦,失蹤者是張志新(化名)和其女友劉穎控轿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡茬射,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年鹦蠕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片在抛。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡片部,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出霜定,到底是詐尸還是另有隱情档悠,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布望浩,位于F島的核電站辖所,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏磨德。R本人自食惡果不足惜缘回,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望典挑。 院中可真熱鬧酥宴,春花似錦、人聲如沸您觉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琳水。三九已至肆糕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間在孝,已是汗流浹背诚啃。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留私沮,地道東北人始赎。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像仔燕,于是被迫代替她去往敵國和親造垛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容