2018年7月3日【Python學(xué)習(xí)筆記】

一伙单、正則表達(dá)式

正則表達(dá)式主要用于字符串查找‘匹配潘酗、分割

import re

match(正則表達(dá)式字符串淳梦,需要匹配的字符串)

1.不帶任何正則字符的正則表達(dá)式

str1 = 'abc'
print(re.match('abc', str1))

2.點(diǎn)號(hào). -->匹配任意的字符

r'a.c':匹配一個(gè)字符串第一個(gè)字符是'a'艾船,第二個(gè)字符是任意字符顶籽,第三個(gè)字符是'c'的字符

str1 = 'a^ch'  # 只會(huì)匹配a-c,c后面寫在多都沒用
print(re.match(r'a.c', str1))

寫一個(gè)正則表達(dá)式玩般,可以匹配一個(gè)字符串第一個(gè)字符是g中間是兩個(gè)任意字符,然后一個(gè)d

str2 = 'good'
print(re.match(r'g..d', str2))

3.\w:匹配字母礼饱、數(shù)字坏为、下劃線

str1 = 'good'
print(re.match(r'g\w\wd', str1))

4.\s:匹配空白字符(空格(\r)、制表符(\t)镊绪、回車(\n)等)

寫一個(gè)正正則表達(dá)式匀伏,匹配第一個(gè)字符是數(shù)字、字母或者下劃線蝴韭,第二個(gè)字母是a够颠,第三個(gè)字符是空白

str1 = '1a '
print(re.match(r'\wa\s', str1))

5.\d:匹配數(shù)字

匹配前兩位必須是數(shù)字的字符串

print(re.match(r'\d\d', '14522'))

6.\b:匹配單詞的邊界

邊界:字符串的開始和結(jié)束、空格榄鉴、標(biāo)點(diǎn)符號(hào)履磨、括號(hào)、波浪號(hào)庆尘、回等
注意:\b是不能匹配出結(jié)果的剃诅,只是對(duì)對(duì)需要出現(xiàn)邊界的要求
(遇到\b的時(shí)候,一定要注意\b后邊的要求的字符必須是單詞的邊界才會(huì)成功)

re_str = r'\bhow\b'
print(re.match(re_str, 'how,are'))

7.^:匹配開頭

^the --->匹配以the開頭的字符

print(re.match(r'^the', 'theabc'))

8.$:匹配字符串結(jié)束

'the$'-->匹配字符串以'the結(jié)束'

print(re.match(r'the$', 'the'))

9.\大寫字母 -->與相應(yīng)的小寫字母的功能相反

10.[]:匹配[]號(hào)任意的一個(gè)字符驶忌,可以是具體的字符也可以是正則符號(hào),一個(gè)[]只能匹配一位的字符

re_str = r'[abc]123'   # 匹配第一個(gè)字符是'a'或者'b'或者'c'综苔,后面是的字符串
print(re.match(re_str, 'a123'))

re_str = r'abc[\da]'
print(re.match(re_str, 'abc2'))

11.[^]:匹配不在[]中的任意的一個(gè)字符

re_str = r'[^abc]123'   # 匹配一個(gè)字符不是a或者b或者c,后面是123的字符串
print(re.match(re_str, '@123'))

12.*:匹配0次或者多次

r'a' -->匹配第一個(gè)字符是0個(gè)'a'或者多個(gè)'a';'cc','abc','aaabc'
r'\d
' -->匹配第一個(gè)字符是0個(gè)或者多個(gè)數(shù)字位岔;'cc','abc','123abc'
r'[abc]*-->'cc','abckk'

print(re.match(r'a*', 'aaacc'))

13.+:匹配1次或者多次

r'a+' -->匹配第一個(gè)字符串開頭是一個(gè)a或者多個(gè)a:'acc', 'aacc', 'aaadjk'
r'\w+'-->前面是一個(gè)或多個(gè)字母數(shù)字下劃線

print(re.match(r'a+', 'abnd'))

14.?:匹配0次或者1次

r'a?123' -->匹配一個(gè)字符串'123'前面有一個(gè)a或者沒有字符

print(re.match(r'a?123', '123'))

15.{n}:匹配n次

寫一個(gè)正則表達(dá)式如筛,完全匹配一個(gè)11位的數(shù)字字符串

print(re.match(r'\d{11}$', '12345678912'))

寫一個(gè)正則表達(dá)式匹配第一位是1,第二位是3,5,7,8其他九位是任意數(shù)字

str1 = r'1[3578]\d{9}$'
print(re.match(str1, '13562348397'))

16.{n,}:匹配至少n次

r'\d{3,}-->匹配字符串開始是三個(gè)或者三個(gè)以上的數(shù)字抒抬;'123abc','12345ab'

print(re.match(r'\d{3,}', '12345abc'))

17.{m,n}:匹配至少m次杨刨,最多n次

要求密碼是6-16位,由字母數(shù)字下劃線組成

str1 = r'\w{6,16}'
print(re.match(str1, 'abnf123__'))

判斷一個(gè)字符串是否是標(biāo)識(shí)符(字母數(shù)字下劃線擦剑,數(shù)字不開頭)

a-z:是字母a-z中的任意一個(gè)妖胀,這是小寫,大寫也可以這么寫惠勒;同理1-9

str2 = r'[a-zA-Z_]\w*$'
print(re.match(str2, 'A2hdj'))

18.|:分子(相當(dāng)于邏輯運(yùn)算符中的or)

r'(a|b)abc'-->匹配第一個(gè)字符是a或者b赚抡,后面是abc
r'\d{3}|([a-zA-Z]{3}) -->匹配開頭是3個(gè)數(shù)字或者是3個(gè)字母

print(re.match(r'(a|b)abc', 'aabc'))
print(re.match(r'\d{3}|([a-zA-Z]{3})', '231cvd'))

19.*?:匹配0次或多次,但盡可能少的匹配

print(re.match(r'a*?', 'aabc'))

20.+?:重復(fù)一次或者多次纠屋,盡可能少的匹配

print(re.match(r'a+?', 'aabc'))

總結(jié)?:就是在重復(fù)多次的匹配中如何后面加?涂臣,匹配的時(shí)候以能匹配的最少次數(shù)去匹配

用戶名必須是由字母數(shù)字下劃線構(gòu)成的長(zhǎng)度為6-20個(gè)字符之間,QQ號(hào)是5-12個(gè)的數(shù)字組成,首位不能為0

str1 = r'\w{6, 20}'
str2 = r'[1-9]\d{4, 11}'

二赁遗、內(nèi)置函數(shù)

1.compile方法

將正則表達(dá)式編譯成正則對(duì)象(就可以去調(diào)用相關(guān)的正則表達(dá)式對(duì)象方法)

result = re.compile(r'\d{2}[a-zA-Z]{2}')
print(type(result))

2.match方法

a.match(正則表達(dá)式字符串/對(duì)象署辉,要匹配的字符串)
用指定的正則表達(dá)式和指定的字符串進(jìn)行匹配,如果匹配成功岩四,就返回匹配對(duì)象哭尝,否則就返回None
b.正則表達(dá)式對(duì)象.match(要匹配的字符串)

result = re.match(r'a\dd.', 'a5dl5dg')
print(result)
# 獲取匹配結(jié)果在原字符串中的范圍
print(result.span())   # (0, 4)
# 可以獲取匹配開始的位置和結(jié)束的位置
print(result.start(), result.end())  # 0 4
# 獲取匹配的結(jié)果
print(result.group())   # a5dl
# 獲取原字符串
print(result.string)    # a5dl5dg

3.search

a. re.search(指定的正則表達(dá)式/對(duì)象,指定的字符串)
b. 正則對(duì)象.search(指定的字符串)
在指定的字符串中剖煌,去查找第一個(gè)(只查找第一個(gè))指定正則表達(dá)式匹配的字符串,
如果找到了就返回匹配對(duì)象材鹦,沒有就返回None

result = re.search(r'a\dc', 'ioja3clma6cj')
print(result)

4.findall

re.findall(指定的正則表達(dá)式/對(duì)象,指定的字符串)
獲取指定字符串中耕姊,所有滿足正則表達(dá)式的子串桶唐,返回值是一個(gè)列表。如果沒有就返回一個(gè)空列表

result = re.findall(r'a\dc', 'ioja3clma6cj')
print(result)   # ['a3c', 'a6c']

練習(xí):獲取一個(gè)字符串中箩做,所有以ing結(jié)束的單詞
'I love singing dan dancing aingc'

result = re.findall(r'\b[A-Za-z]*ing\b', 'I love singing dan dancing aingc')
print(result)

5.split

re.split(指定的正則表達(dá)式/對(duì)象,指定的字符串,最大的拆分?jǐn)?shù)(默認(rèn)是 0妥畏,全部拆分))
正則對(duì)象.split(指定的字符串)

result = re.compile('[,\s]').split('abc,bcd,amn,ssdf oopp oplk')
print(result)

'窗前明月光邦邦,疑是地上霜,舉頭望明月醉蚁,低頭思故鄉(xiāng)燃辖。'

result = re.split(r'[,网棍。]', '窗前明月光黔龟,疑是地上霜。舉頭望明月滥玷,低頭思故鄉(xiāng)氏身。')
del result[-1]
print(result)

6.sub

re.sub(正則表達(dá)式/對(duì)象,替換字符串惑畴,原字符串)替換后原字符串不變蛋欣,返回一個(gè)新的字符串
將指定字符串中的指定的子串替換成其他的字符串

練習(xí):刪除字符串成'andd anbsbabbssasbad'中的'a'和'b'

result = re.sub(r'[ab]', '', 'andd anbsbabbssasbad')
print(result)

練習(xí):將臟話替換成

result = re.sub(r'[媽掛操艸]|智障|sB', '*', '你掛機(jī)了?')
print(result)

補(bǔ)充:正則表達(dá)式中中文的判斷

判斷是否有中文,如果有就打印不合格如贷,沒有就合格
使用中文的unicode編碼范圍:\u4e00-\u9fa5(正則表達(dá)式中Unicode前面需要加'\u')

result = re.search(r'[\u4e00-\u9fa5]', 'jisd好dfs')
print(result)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陷虎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杠袱,更是在濱河造成了極大的恐慌尚猿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楣富,死亡現(xiàn)場(chǎng)離奇詭異凿掂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纹蝴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門缠劝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潮梯,“玉大人,你說我怎么就攤上這事惨恭”螅” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵脱羡,是天一觀的道長(zhǎng)萝究。 經(jīng)常有香客問我,道長(zhǎng)锉罐,這世上最難降的妖魔是什么帆竹? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮脓规,結(jié)果婚禮上栽连,老公的妹妹穿的比我還像新娘。我一直安慰自己侨舆,他們只是感情好秒紧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挨下,像睡著了一般熔恢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臭笆,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天叙淌,我揣著相機(jī)與錄音,去河邊找鬼愁铺。 笑死鹰霍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茵乱。 我是一名探鬼主播衅谷,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼似将!你這毒婦竟也來了获黔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤在验,失蹤者是張志新(化名)和其女友劉穎玷氏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腋舌,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盏触,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赞辩。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雌芽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辨嗽,到底是詐尸還是另有隱情世落,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布糟需,位于F島的核電站屉佳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洲押。R本人自食惡果不足惜武花,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杈帐。 院中可真熱鬧体箕,春花似錦、人聲如沸挑童。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)炮沐。三九已至争群,卻和暖如春回怜,著一層夾襖步出監(jiān)牢的瞬間大年,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工玉雾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翔试,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓复旬,卻偏偏與公主長(zhǎng)得像垦缅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驹碍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • Python中的正則表達(dá)式(re) import rere.match #從開始位置開始匹配壁涎,如果開頭沒有則無re...
    BigJeffWang閱讀 7,053評(píng)論 0 99
  • python的re模塊--細(xì)說正則表達(dá)式 可能是東半球最詳細(xì)最全面的re教程,翻譯自官方文檔,因?yàn)楣俜轿臋n寫的是真...
    立而人閱讀 22,833評(píng)論 4 46
  • 一、Java 簡(jiǎn)介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚_t_閱讀 4,154評(píng)論 1 44
  • 又是新的一周志秃,休息兩天后理所當(dāng)然的是工作效率提升怔球,按部就班的過了一天,都沒有時(shí)間思考做的工作的前后延續(xù)性浮还,比如說竟坛,...
    ef053e4d2a28閱讀 468評(píng)論 0 0
  • 落日出現(xiàn)之前,海平線還沒有那么明顯,你牽著她的手担汤,對(duì)她說:這輩子遇到你涎跨,我還不覺得是最好的,最好的是在我有限的...
    凝一世清秋閱讀 160評(píng)論 0 2