正則表達(dá)式基礎(chǔ)函數(shù)

引用來源

正則

正則表達(dá)式是一個特殊的字符序列抡锈,它能幫助你方便的檢查一個字符串是否與某種模式匹配彼乌,提供了一種字符串的匹配模式(pattern)

常用的元字符

1.  []   # 包含,默認(rèn)是一個字符長度
    [a]  # 匹配a字母
    [abc]  # 匹配a或b或c中的任意一個
    [a-z]  # 匹配a-z中的任意一個
    [A-Z]  # 匹配A-Z中的任意一個
    [a-zA-Z]  # 匹配任意一個字母
    [0-9]  # 匹配數(shù)字
2. ^ 以..開頭
    ^a  # 匹配以a作為開頭的一串字符
    ^abc  # 匹配以abc作為開頭的一串字符
    ^[abc]    # 匹配a或b或c開頭的一串字符
    [^abc]  # 匹配除去a或b或c以外的
    [^a-zA-Z]  # 匹配a-z或A-Z以外的字符
 3.  $  以..結(jié)尾
     ^[1][3-8][0-9]{9}$  # 匹配手機(jī)號, 以1作為開頭 第二位是3-8, 后幾位是0-9
     ^[1][345678][0-9]{9}$  # 匹配手機(jī)號, 同上
4.  {m}  表示匹配前面表達(dá)式m次
    abc{2}  # 匹配ab和c兩次
    1[a-z]{2}  # 匹配1和兩個小寫字母
5.  {m,n}  表示匹配前面的表達(dá)從m到n次
    [1-9][0-9]{4,10}     # 匹配第一位是1-9, 4到10位的數(shù)字0-9  
6.  {m,}  匹配前面的表達(dá)式至少m次
7. 器紧?  表示前面的表達(dá)式可有可無
    [1-9][0-9]?   # 匹配數(shù)字1-99(后面的一位0-9可有可無)
8.  .   匹配除了換行符\n以外的任意字符
    .{2}   # 匹配除了換行符以外的任意兩個字符邓尤。
9.  * 匹配起那么的表達(dá)式 0次到多次
    .*  # 匹配除了換行符以外的任意字符任意次--貪婪模式 
    .{0,}  # 同上
    .*?  # 匹配除了換行符以外的任意字符任意次--拒絕貪婪模式 
10. + 表示匹配前面的表達(dá)式1次到多次
    .+  # 匹配除了換行符以外的任意字符至少一次-- 貪婪模式 
    .{1,}  # 同上
    .+?  # 匹配除了換行符以外的任意字符至少一次--拒絕貪婪模式 
11.  ()  # 代表一個臨時區(qū)域單元, 表達(dá)式定義為組畔况;2.匹配括號內(nèi)容并獲取這一匹配敦跌。
12. |  或
    a|b  # 匹配a或b
    ab(c|d)  # 匹配ab與c或d其中一個

正則在python中的修正符

re.I  # 匹配不區(qū)分大小寫, 還可以使用全稱的re.IGNORECASE澄干。
re.M  # 將要匹配的字符串視為多行,可以匹配每一行, 還可以使用全稱的re.MULTILINE
re.S  # 將要匹配的字符串視為單行,并把換行符作為一個普通字符匹配,還可以使用全稱的re.DOTALL

# 可以使用或運算符|同時設(shè)置多個修正符。

特殊意義的字符

\d  等同于[0-9]   # 匹配一位數(shù)字
\D  等同于[^0-9]  # 匹配除了數(shù)字以外的一個字符
\w  等同于[a-zA-Z0-9_ ]  # 匹配數(shù)字字母下劃線的一個字符
\W  等同于[^a-zA-Z0-9_ ]  # 匹配除了字母數(shù)字下劃線的其他字符
\s    等同于[\n\r\t] # 匹配空白字符 包括空格柠傍、制表符麸俘、換頁符等等
\S   # 匹配非空白字符

正則常用的函數(shù)

import re
(1) re.findall(pattern, string, flags)
匹配所有內(nèi)容,李列表的形式返回, 當(dāng)匹配失敗時候返回空列表
參數(shù)1pattern:正則的匹配規(guī)則
參數(shù)2string:要匹配的字符串
參數(shù)3flags:修正符

實例

myStr = """
<a >百*</a>    # 給每一行進(jìn)行編號1
<a >淘*1</a>  # 2 
<a href="www.taobao.com">淘*2</a>         #  3
<A >電影網(wǎng)站</>   # 4
<a >*東                 # 5
</a>
"""
dataList = re.findall('<a href=".*?">.*?</a>',myStr)  #  匹配1,2,3. 返回列表
#結(jié)果:['<a ,
 '<a ,
 '<a href="www.taobao.com">淘*2</a>']
dataList = re.findall('<a href=".*?">.*?</a>', myStr, re.I)  # 匹配編號123,不區(qū)分大小寫 
#結(jié)果:['<a ,
 '<a ,
 '<a href="www.taobao.com">淘*2</a>']
dataList = re.findall('<a href=".*?">.*?</a>',myStr,re.S|re.I)  # 匹配12345   
#結(jié)果:['<a ,
 '<a ,
 '<a href="www.taobao.com">淘*2</a>',
 '<A >電影網(wǎng)站</>   # 4\n<a >*東                 # 5\n</a>']

(2) re.match(pattern, string, flags)
從開始位置匹配,只匹配一次, 匹配成功返回對象,匹配失敗返回None

實例

ret = re.match("[a]","1a")
print(ret)  # None  從開始第一個位置處匹配
ret = re.match("[a-zA-Z]{2,3}","Aaaaaa")
print(ret)   # 返回對象 <_sre.SRE_Match object; span=(0, 3), match='Aaa'>, 匹配了三次
# 使用返回的對象的group()方法獲取匹配的結(jié)果
print(ret.group())  # Aaa

(3) re.search(pattern, string, flags)
匹配一次, 匹配成功返回匹配的對象,匹配失敗返回None。與re.match()區(qū)別是就是可以從任意位置匹配惧笛。

實例

ret = re.search("[a]","1a")
print(ret)  #   從開始第二個位置處匹配 <_sre.SRE_Match object; span=(1, 2), match='a'>
print(ret.group())  # 打印 a

(4) re.sub(pattern, repl,count, flags)/re.subn()
使用正則表達(dá)式替換, 返回替換后的結(jié)果
re.subn()可以返回替換后的結(jié)果和次數(shù)

實例

myStr = "<b>我是b</b><i>我是i</i><strong>我是strong</strong>"
# 將b換成em 即<em>第三方</em>
data = re.sub("<b>(.*?)</b>", "<em>我是em</em>", myStr)
print(data)   #  <em>我是em</em><i>我是i</i><strong>我是strong</strong>
# 將所有的標(biāo)簽名換成em,不改變標(biāo)簽內(nèi)的內(nèi)容
data  = re.sub("<b>(.*?)</b><i>(.*?)</i><strong>(.*?)</strong>", "<em>\\1</em><em>\\2</em><em>\\3</em>",myStr)
print(data)  # 其中\(zhòng)1是取第一個(.*?)獲取的內(nèi)容, \2是第二個(.*?)的內(nèi)容,...从媚。<em>我是b</em><em>我是i</em><em>加粗strong</em> 
# 將1970/01/02變?yōu)?1月02日1970年(考察分組,內(nèi)容的獲取)
myData = "1970/01/02"
ret = re.sub("(\d+)/(\d+)/(\d+)", "\\2月\\3日\\1年", myData)
print(ret)  #  01月02日1970年

(5)re.split(pattern,string,maxsplit,flags)
正則的拆分, 將字符串拆分成列表
參數(shù):
maxsplit: 最大的拆分次數(shù)

實例

data = "1jjj1h$hhh1hjj&j1"
print(re.split("\W",data))  #  ['1jjj1h', 'hhh1hjj', 'j1']   ---使用除了字母數(shù)字下劃線以外的字母進(jìn)行拆分 
print(re.split("\d",data))  # ['', 'jjj', 'h$hhh', 'hjj&j', ''] ---使用一位數(shù)字進(jìn)行拆分
print(re.split("\d",data,1))  # ['', 'jjj1h$hhh1hjj&j1'] ---使用一位數(shù)字進(jìn)行拆分,拆分一次

(6)re.finditer(pattern,string,maxsplit,flags)
匹配所有, 以迭代器的形式返回結(jié)果

實例

myStr = "abcDMdefg23456uuii"
reIter = re.finditer("[a-z]",myStr)    # 匹配的結(jié)果應(yīng)該是abcdefguuii, 但是使用迭代器返回了
print(reIter)  #  <callable_iterator object at 0x...>
print(next(reIter))  # 調(diào)用next()輸出 <_sre.SRE_Match object; span=(0, 1), match='a'>
print(next(reIter).group())  # a  ---進(jìn)行取值

(7) re.compile(pattern, flags)
先使用compile()函數(shù), 將正則表達(dá)式編譯為Pattern實例, 然后使用Pattern實例處理文本并獲得匹配結(jié)果, 執(zhí)行效率高 將正則和字符串分開

實例

myStr = "abcDMdefg23456uuii"
pattern = re.compile("[a-z]")
ret = pattern.findall(myStr)  # 其他的方法(match,sub..)都可以使用
print(ret)  # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'u', 'u', 'i', 'i']

URL處理模塊

導(dǎo)包

import urllib.request
(1) urlopen(url, timeout) 打開連接地址
timeout: 設(shè)置超時時間

實例:

import urllib.request
url = "http://bbs.tianya.cn/m/post-140-393974-6.shtml"
response = urllib.request.urlopen(url,)
print(response)  # HTTPResponse object
print(response.read())  # 打印響應(yīng)的內(nèi)容,但是返回的是字節(jié)形式的內(nèi)容,需要根據(jù)網(wǎng)頁head設(shè)置的編碼進(jìn)行解碼
print(response.read().decode('utf-8'))
print(response.readlines())  # 讀取每一行 以列表的形式返回
print(response.code)  # 返回狀態(tài)碼
print(response.geturl())  # 獲取當(dāng)前訪問的地址

(2) url地址編碼

實例:

url = " https://www.baidu.com/s?word=美女&tn=site888_3_pg&lm=-1&ssl_s=1&ssl_c=ssl1_160e40bb10d"
ret = urllib.request.quote(url)  
print(ret)  # 對url地址進(jìn)行url編碼 https%3A//www.baidu.com/s%3Fword%3D%E7%BE%8E%E5%A5%B3%26tn%3Dsite888_3_pg%26lm%3D-1%26ssl_s%3D1%26ssl_c%3Dssl1_160e40bb10d
print(urllib.request.unquote(ret))  # 進(jìn)行url解碼  https://www.baidu.com/s?word=美女&tn=site888_3_pg&lm=-1&ssl_s=1&ssl_c=ssl1_160e40bb10d

(3) 添加用戶代理UserAgent(在后面爬蟲部分很有用)

實例

import urllib.request
url = "http://www.baidu.com"
ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1"
request = urllib.request.Request(url,headers={'User-Agent':ua})  # 實例化request對象
response = urllib.request.urlopen(request )
print(response.read().decode("utf-8"))

(4) 下載文件
request.urlretrieve(url, fileName)
參數(shù):
url: 下載的url地址
fileName:保存到本地的文件名

實例:

from urllib import request
url = "http://www.sinaimg.cn/dy/slidenews/4_img/2009_44/163_13716_315914.jpg"
request.urlretrieve(url, "1.jpg")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市患整,隨后出現(xiàn)的幾起案子拜效,更是在濱河造成了極大的恐慌,老刑警劉巖各谚,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紧憾,死亡現(xiàn)場離奇詭異,居然都是意外死亡昌渤,警方通過查閱死者的電腦和手機(jī)赴穗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膀息,“玉大人望抽,你說我怎么就攤上這事÷耐瘢” “怎么了煤篙?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長毁腿。 經(jīng)常有香客問我辑奈,道長苛茂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任鸠窗,我火速辦了婚禮妓羊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己世曾,他們只是感情好矛渴,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著净刮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硅则。 梳的紋絲不亂的頭發(fā)上淹父,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音怎虫,去河邊找鬼暑认。 笑死,一個胖子當(dāng)著我的面吹牛大审,可吹牛的內(nèi)容都是我干的蘸际。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼徒扶,長吁一口氣:“原來是場噩夢啊……” “哼粮彤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酷愧,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤驾诈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后溶浴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乍迄,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年士败,在試婚紗的時候發(fā)現(xiàn)自己被綠了闯两。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡谅将,死狀恐怖漾狼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饥臂,我是刑警寧澤逊躁,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站隅熙,受9級特大地震影響稽煤,放射性物質(zhì)發(fā)生泄漏核芽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一酵熙、第九天 我趴在偏房一處隱蔽的房頂上張望轧简。 院中可真熱鬧,春花似錦匾二、人聲如沸哮独。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皮璧。三九已至,卻和暖如春转培,著一層夾襖步出監(jiān)牢的瞬間恶导,已是汗流浹背浆竭。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工浸须, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邦泄。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓删窒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顺囊。 傳聞我的和親對象是個殘疾皇子肌索,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

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

  • 早上好,昨天晚上本來要完成一段文字的抄寫特碳,但是由于眼睛實在不能睜開诚亚,因此我把時間移到了早上。現(xiàn)在將沒有寫完的文字繼...
    X八英里閱讀 121評論 0 0
  • 揭秘南杉企業(yè)午乓! 南杉企業(yè)《終極財富秘密》線上系列課程站宗,作為財商必修課程,以系列課的形式為大家呈現(xiàn)益愈。在經(jīng)過8年歲月打...
    小芬兒杉閱讀 115評論 0 0
  • 清晨櫻花透明的露珠 家里最盡職盡責(zé)勤快的??里樂呵的婆婆梢灭, 一邊說著媽媽我腿好疼好疼你別同我講話不原諒你一邊去跑步...
    七穎子閱讀 121評論 0 1
  • 春天悄然而至,尤其是這個春天蒸其,所有人都呆在家里敏释,出去的也是行色匆匆,那美好的春色摸袁,也不像往年那樣被無數(shù)人期待去游賞...
    9a6741dc00cd閱讀 124評論 0 0
  • 1.業(yè)精于勤钥顽,荒于嬉;行成于思靠汁,毀于隨蜂大。(韓愈) 2.人生最精彩的不是實現(xiàn)夢想的瞬間湿蛔,而是堅持夢想的過程。(韓寒)...
    桃子_284b閱讀 115評論 0 0