Python day23:re模塊與面向?qū)ο?/h1>

一、正則表達式
①正則表達式:由一系列特殊字符拼接而成的表達式/規(guī)則嘀粱,該表達式用于從一個大字符串中匹配出符合規(guī)則的子字符串
②窄俏、常用匹配模式(元字符)
元字符 (參見 python 模塊 re 文檔)

. 匹配任意字符(不包括換行符)
^ 匹配開始位置约谈,多行模式下匹配每一行的開始
$ 匹配結(jié)束位置指巡,多行模式下匹配每一行的結(jié)束
* 匹配前一個元字符0到多次
+ 匹配前一個元字符1到多次
? 匹配前一個元字符0到1次
{m,n} 匹配前一個元字符m到n次
\ 轉(zhuǎn)義字符,跟在其后的字符將失去作為特殊元字符的含義火鼻,例如\.只能匹配.室囊,不能再匹配任意字符
[] 字符集,一個字符的集合魁索,可匹配其中任意一個字符
| 邏輯表達式 或 融撞,比如 a|b 代表可匹配 a 或者 b
(...) 分組,默認為捕獲粗蔚,即被分組的內(nèi)容可以被單獨取出尝偎,默認每個分組有個索引,從 1 開始鹏控,按照"("的順序決定索引值
(?iLmsux) 分組中可以設(shè)置模式致扯,iLmsux之中的每個字符代表一個模式,用法參見 模式 I
(?:...) 分組的不捕獲模式,計算索引時會跳過這個分組
(?P<name>...) 分組的命名模式当辐,取此分組中的內(nèi)容時可以使用索引也可以使用name
(?P=name) 分組的引用模式抖僵,可在同一個正則表達式用引用前面命名過的正則
(?#...) 注釋,不影響正則表達式其它部分,用法參見 模式 I
(?=...) 順序肯定環(huán)視缘揪,表示所在位置右側(cè)能夠匹配括號內(nèi)正則
(?!...) 順序否定環(huán)視耍群,表示所在位置右側(cè)不能匹配括號內(nèi)正則
(?<=...) 逆序肯定環(huán)視,表示所在位置左側(cè)能夠匹配括號內(nèi)正則
(?<!...) 逆序否定環(huán)視找筝,表示所在位置左側(cè)不能匹配括號內(nèi)正則
(?(id/name)yes|no) 若前面指定id或name的分區(qū)匹配成功則執(zhí)行yes處的正則蹈垢,否則執(zhí)行no處的正則
\number 匹配和前面索引為number的分組捕獲到的內(nèi)容一樣的字符串
\A 匹配字符串開始位置,忽略多行模式
\Z 匹配字符串結(jié)束位置呻征,忽略多行模式
\b 匹配位于單詞開始或結(jié)束位置的空字符串
\B 匹配不位于單詞開始或結(jié)束位置的空字符串
\d 匹配一個數(shù)字耘婚, 相當于 [0-9]
\D 匹配非數(shù)字,相當于 [^0-9]
\s 匹配任意空白字符, 相當于 [ \t\n\r\f\v]
\S 匹配非空白字符陆赋,相當于 [^ \t\n\r\f\v]
\w 匹配數(shù)字、字母嚷闭、下劃線中任意一個字符攒岛, 相當于 [a-zA-Z0-9_]
\W 匹配非數(shù)字、字母胞锰、下劃線中的任意字符灾锯,相當于 [^a-zA-Z0-9_]

③、應用
1嗅榕、\w匹配字母數(shù)字及下劃線

print(re.findall('\w',"bs aaah1314ck  a(vdv*acaj")
  1. \W匹配非字母數(shù)字下劃線
print(re.findall('\W',"bs aaah1314ck  a(vdv*acaj)"))

3顺饮、\s匹配任意空白字符吵聪,等價于[\t\n\r\f]

print(re.findall('\s','bs aaah1\t314\nck  a(vdv*acaj)'))
print(re.findall('\w\s',"h ello 123_ (0"))

4、\S匹配任意非空字符

print(re.findall('\S','bs aaah1\t314\nck  a(vdv*acaj)'))

5兼雄、\d匹配任意數(shù)字

print(re.findall("\d",'bs aaah1314ck  a(vdv*acaj)'))

6吟逝、\D匹配任意非數(shù)字

print(re.findall('\D','bs aaah1314ck  a(vdv*acaj'))
print(re.findall("a\db","a1b a2b a b aab aaaaaaaa1b a2c a22c a 3c"))

7、\n與\t:自己打的回車也算一個\n

msg="""h e\tll\n\no 123_ (0

"""
print(re.findall('\n',msg))
print(re.findall('\t',msg))
print(re.findall(' ',msg))

8赦肋、^與:^只匹配第一個块攒,如果不存在也不會繼續(xù)向后匹配,只匹配最后一個佃乘,如不存在也不會往前匹配

print(re.findall("^egon","egon asdf 213123 egonafsadfegon"))
print(re.findall("egon$","egon asdf 213123 egonafsadfegon "))
print(re.findall("a\w\w\wc","ab12c3c a213c"))
print(re.findall("^a\w\w\wc$","ab_2c"))

9囱井、.與[]
9.1 .:代表匹配一個字符,該字符可以是任意字符

print(re.findall("a\db","a1b a2b aab aaaaaaab a+b a-b a c"))
print(re.findall("a\wb","a1b a2b aab aaaaaaab a+b a-b a c"))
print(re.findall("a.b","a1b a2b aab aaaaaaab a+b a-b a b a c"))

.默認匹配除了\n之外的所偶字符趣避,如果要讓.也匹配\n需要在后面加上re.DATALL

print(re.findall("a.b","a1b a2b aab aaaaaaab a\tb a-b a\nb a c",re.DOTALL))

9.2 []:代表匹配一個字符庞呕,我們可以指定該字符的范圍

print(re.findall("a[+-]b", "a1b a2b aab aaaaaaab a+b a-b a c"))
print(re.findall("a[.*/+-]b", "a.b a2b a*b a/b aab aaaaaaab a+b a-b a c"))
print(re.findall("a[a-z]b", "a.b a2b a*b a/b aab aaaaaaab a+b a-b a c")) # -放在[]內(nèi)的開頭或結(jié)果
print(re.findall("a[a-zA-Z]b", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c")) # -放在[]內(nèi)的開頭或結(jié)果
print(re.findall("a\db", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c")) # -放在[]內(nèi)的開頭或結(jié)果
print(re.findall("a[0-9]b", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c")) # -放在[]內(nèi)的開頭或結(jié)果
[^...]代表取反
print(re.findall("a[^0-9]b", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c")) # -放在[]內(nèi)的開頭或結(jié)果

9.3 *: 左邊那個字符出現(xiàn)0次或者無窮次

print(re.findall("ab*","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

9.4 +: 左邊那個字符出現(xiàn)1次或者無窮次

print(re.findall("ab+","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

9.5 {n,m}: 左邊那個字符出現(xiàn)n次到m次

print(re.findall("ab{0,}","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab*","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab{1,}","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab+","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab{2,5}","a ab abb abbb abbbb abbbbbbbb abbbbbbbbbbbb bbbbbbbbb"))

9.6 ?: 左邊那個字符出現(xiàn)0次到1次

print(re.findall("ab?","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

9.7 .*: 匹配所有

print(re.findall("a.*b","123 a1231-==-000b123123123123123b"))
print(re.findall("a.*?b","123 a1231-==-000b123123123123123b"))

9.7例1:

msg = '<a  target="_blank"><strong><span style="color: #ff0000;">原理圖:https://pan.baidu.com/s/1skWyTT7</span></strong></a><a 
url_pattern = re.compile('href="(.*?)"')
res=url_pattern.findall(msg)
print(res)

res=url_pattern.findall('<a href="www.sina.com.cn"></a>')
print(res)

9.7例2:

print(re.findall("a.*b","a1b a+b a-b a\nb a\tb",re.DOTALL))

10 ():分組

print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab

10.1 取消分組

print(re.findall('(?:ab)+123','ababab123')) 
#findall的結(jié)果不是匹配的全部內(nèi)容程帕,而是組內(nèi)的內(nèi)容,?:可以讓結(jié)果為匹配的全部內(nèi)容

11 |:或者

print(re.findall("compan(?:ies|y)","Too many companies have gone bankrupt, and the next one is my company'"))
print(re.findall("\d+\.?\d*","as9fdasl333...4444df1111asdf3333dfadf333.44dafadf3.5555asdfsafd.5555"))
  1. \
print(re.findall('a\\c','a\c a1c aac')) 
#對于正則來說a\\c確實可以匹配到a\c,但是在python解釋器讀取a\\c時住练,會發(fā)生轉(zhuǎn)義,然后交給re去執(zhí)行骆捧,所以拋出異常
print(re.findall('a\\\\c','a\c a1c aac')) # 正確

④澎羞、re模塊提供的方法介紹

# ===========================re模塊提供的方法介紹===========================
import re
#1
print(re.findall('e','alex make love') ) 
  #['e', 'e', 'e'],返回所有滿足匹配條件的結(jié)果,放在列表里
#2
print(re.search('e','alex make love').group())
#e,只到找到第一個匹配然后返回一個包含匹配信息的對象,該對象可以通過調(diào)用group()方法得到匹配的字符串,如果字符串沒有匹配,則返回None敛苇。

#3
print(re.match('e','alex make love'))    
#None,同search,不過在字符串開始處進行匹配,完全可以用search+^代替match

#4
print(re.split('[ab]','abcd'))     
#['', '', 'cd']妆绞,先按'a'分割得到''和'bcd',再對''和'bcd'分別按'b'分割

#5
print('===>',re.sub('a','A','alex make love')) #===> Alex mAke love,不指定n枫攀,默認替換所有
print('===>',re.sub('a','A','alex make love',1)) #===> Alex make love
print('===>',re.sub('a','A','alex make love',2)) #===> Alex mAke love
print('===>',re.sub('^(\w+)(.*?\s)(\w+)(.*?\s)(\w+)(.*?)$',r'\5\2\3\4\1','alex make love')) #===> love make alex
print('===>',re.subn('a','A','alex make love')) #===> ('Alex mAke love', 2),結(jié)果帶有總共替換的個數(shù)


#6
obj=re.compile('\d{2}')

print(obj.search('abc123eeee').group()) #12
print(obj.findall('abc123eeee')) #['12'],重用了obj

二括饶、面向?qū)ο?br> 面向過程編程
核心是過程二字,過程是解決問題的步驟来涨,即先干啥再干啥后干啥
基于該思想寫程序就是在設(shè)計一條條的流水線

優(yōu)點:復雜的問題流程化图焰、進而簡單化
缺點:擴展性差

面向?qū)ο缶幊?br> 核心是對象二字,對象是一個用來盛放數(shù)據(jù)與功能的容器
基于該思想寫程序就是在整合程序

優(yōu)點:可擴展性強
缺點:編程的復雜度高

其實無論怎么編程底層用的也一定是面向過程蹦掐,并且不是所有場合都適用面向?qū)ο蠹几帷.吘箤τ谲浖碚f可擴展性只是衡量的一個標準。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末卧抗,一起剝皮案震驚了整個濱河市藤滥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌社裆,老刑警劉巖拙绊,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡标沪,警方通過查閱死者的電腦和手機榄攀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來金句,“玉大人檩赢,你說我怎么就攤上這事∨可遥” “怎么了漠畜?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坞靶。 經(jīng)常有香客問我憔狞,道長,這世上最難降的妖魔是什么彰阴? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任瘾敢,我火速辦了婚禮,結(jié)果婚禮上尿这,老公的妹妹穿的比我還像新娘簇抵。我一直安慰自己,他們只是感情好射众,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布碟摆。 她就那樣靜靜地躺著,像睡著了一般叨橱。 火紅的嫁衣襯著肌膚如雪典蜕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天罗洗,我揣著相機與錄音愉舔,去河邊找鬼。 笑死伙菜,一個胖子當著我的面吹牛轩缤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贩绕,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼火的,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淑倾?” 一聲冷哼從身側(cè)響起卫玖,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踊淳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡迂尝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年脱茉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垄开。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡琴许,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溉躲,到底是詐尸還是另有隱情榜田,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布锻梳,位于F島的核電站箭券,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疑枯。R本人自食惡果不足惜辩块,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荆永。 院中可真熱鬧废亭,春花似錦、人聲如沸具钥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骂删。三九已至掌动,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桃漾,已是汗流浹背坏匪。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撬统,地道東北人适滓。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像恋追,于是被迫代替她去往敵國和親凭迹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348