Day17_學(xué)習總結(jié)

Day17.png

1 正則表達式

正則表達式就是做字符串匹配的一種工具收班,很多語法都支持正則語法,正則語法通常是通用的。
python通過re模塊中提供的方法來使用正則表達式
python的正則表達式 -- r'正則':r阻止轉(zhuǎn)義
js正則表達式 -- /正則/

2 正則表達式的字符

2.1 匹配字符

  • 普通字符
    普通字符在正則中代表字符本身系吩,例如:a, A, 1……等。
re_str  = r'hello'
result = re.fullmatch(re_str, 'hello')
print(result)
  • .
    一個.匹配一個任意字符
re_str = r'a.c'  # 要求第二個字符可以是任意字符妒蔚,第一個必須是a,第三個必須是c
result = re.fullmatch(re_str, 'abc')
print(result)
result = re.fullmatch(re_str, 'cbc')
print(result)
  • \w
    匹配字母淑玫、數(shù)字、下劃線面睛,一個\w只能匹配一個字符絮蒿。
    注意:\w并不嚴謹,還可以匹配中文等字符;嚴格來說:不能匹配ASCII碼表中除數(shù)字叁鉴、字母土涝、下劃線以外的符號。
re_str = r'\wabc'
result = re.fullmatch(re_str, 'aabc')
print(result)
result = re.fullmatch(re_str, '&abc')
print(result)
  • \s
    匹配空白字符
    空白字符:空格幌墓、\t, \n但壮;一個\s只能匹配一個空字符
re_str = r'...\s\s...'
result  = re.fullmatch(re_str, 'abc \ncba')
print(result)
  • \d
    匹配數(shù)字
re_str = r'\d\dabc'
result = re.fullmatch(re_str, '12abc')
print(result)
  • \W
    匹配非數(shù)字、字母常侣、下劃線
  • \S
    匹配非空白字符
re_str = r'\Sabc'
result = re.fullmatch(re_str, '1abc')
print(result)
  • \D
    匹配非數(shù)字字符
  • []
    匹配字符集中的一個字符
    [普通字符集] - 蒲培字符集中的任意一個字符
    注意:一個中括號只能匹配一個字符
    括號中也可以放入其他的匹配字符
    [字符1-字符2] -- 匹配字符1到字符2中的任一字符(要求字符1的編碼值小于字符2)
    [0-9] 匹配所有數(shù)字
    [a-z] 小寫字母
    [A-Z] 大寫字母
    [a-zA-Z] 字母
    [\da-zA-z] - 字母數(shù)字下劃線
    [\u4e00-\u9fa5] - 所有中文
    [^字符集] - 匹配不在字符集中的任一一個字符
    [^\u4e00-\u9fa5] - 匹配非中文字符
    [^xyz] - 匹配非xyz
re_str = r'[a-z]abc'
result = re.fullmatch(re_str, '1abc')
print(result)
# 匹配一個長度是4的字符串蜡饵,第一個字符是數(shù)字或者xyz
re_str = r'[\dxyz]abc'
result = re.fullmatch(re_str, '1abc')
print(result)

re_str = r'[\u4e00-\u9fa5]abc'
result = re.fullmatch(re_str,'你abc')
print(result)

2.2 檢測字符

  • \b
    檢查\b所在的位置是否是單詞的邊界
    單詞邊界 -- 字符串開頭、字符串結(jié)尾胳施、空白溯祸,標點符號等
# 匹配一個長度是4的字符串,第一個字符是任意舞肆,后邊是abc焦辅;檢測c的后邊是否是單詞邊界
re_str = r'.abc\b'
print(re.fullmatch(re_str, '8abc'))

re_str = r'how\b are'
print(re.fullmatch(re_str, 'how are'))  # 不能匹配,\b不占位置椿胯,需加空格
  • ^
    檢查是否是字符串開頭
  • $
    檢測是否是字符串的結(jié)尾

2.3 轉(zhuǎn)義符號

轉(zhuǎn)義符號:在有特殊功能筷登、意義的符號前加'\',讓特殊功能的符號變?yōu)槠胀ǚ?br> 注意:除了^放在[]開頭哩盲,和-放在兩個字符之間前方,其他單獨的特殊符號狈醉,在[]中沒有特殊功能,都是表示字符本身.

re_str = r'\d\d.\d\d'
print(re.fullmatch(re_str, '89=78'))
re_str = r'\^\d\d\d'
print(re.fullmatch(re_str, '^789'))
re_str = r'\d\d[.]\d\d'
print(re.fullmatch(re_str, '23=45'))
# ^在[]中惠险,只要不是開頭舔糖,就沒有特殊意義
re_str = r'\d\d[a^]\d\d'
print(re.fullmatch(re_str, '23^45'))
# -在[]中,只要不放在字符之間就沒有特殊意義
re_str = r'\d\d[-a]\d\d'
print(re.fullmatch(re_str, '23-45'))

2.4 匹配次數(shù)

*-- 匹配0次或多次
字符* -- 指定字符出現(xiàn)0次或者多次
a* -- 字符a匹配0次或多次
\d* -- 數(shù)字出現(xiàn)0次或多次
[a-z]* -- 小寫字母匹配0或多次
+ -- 匹配1次或多次
? -- 0次或1次
{} 指定匹配次數(shù)
{N} -- 匹配N次
{M,N} -- 匹配至少M次莺匠,最多N次
{M,} -- 至少M次
{金吗,N} -- 至多N次

re_str = r'a*bc'
print(re.fullmatch(re_str, 'bc'))
print(re.fullmatch(re_str, 'ac'))

re_str = r'a\d+b'

re_str = r'[+-]?\d*'
print(re.fullmatch(re_str, '0'))

re_str = r'\d{4}'
print(re.fullmatch(re_str, '4444'))
re_str = r'\d{2,4}'
print(re.fullmatch(re_str, '422'))

# 寫一個正則表達式判斷密碼是否復(fù)合要求:
# 密碼由數(shù)字或字母組成,并且第一個字符是大寫字母趣竣,長度是6-12位
# 是否復(fù)合要求返回提示
re_str = r'[A-Z][A-Za-z\d]{5,11}'
a = input('輸入密碼')
if re.fullmatch(re_str, a):
    print("密碼復(fù)合要求")
else:
    print('密碼不復(fù)合要求')

2.5 分支和分組

  • | -- 分支
    正則1|正則2 -- 先用正則1進行匹配摇庙,如果匹配失敗再用正則2匹配。正則1和正則2中只要有一個成功就成功遥缕,都失敗則失敗卫袒。
    注意:如果正則1匹配成功了,不會使用正則2去匹配
# 匹配一個字符串单匣,開頭是abc或者xyz

re_str = r'abc.*|xyz.*'
print(re.fullmatch(re_str, 'abc'))
  • () -- 分組
    將部分正則作為一個整體
#整體區(qū)分
re_str = r'(xxx|yyy)[a-z]{2}[a-z]{2}\d{2}'
#整體操作
re_str = r'(\d{2}[a-zA-Z]{2}){3}'
# 整體重復(fù)
# \M  --  重復(fù)前面第M個分組匹配到的內(nèi)容
# 89abc89夕凝,11abc11
re_str = r'(\d\d)abc\1'  # \1表示重復(fù)第一個分組
print(re.fullmatch(re_str, '90abc90'))

re_str = r'(\d{3})([a-z]{2})\1\1\2'

2.6 非貪婪

貪婪 - 匹配次數(shù)不確定的時候盡可能多的匹配(以上次數(shù)不確定的符號都是貪婪的)
非貪婪 -- 匹配次數(shù)不確定的時候盡可能少的匹配(次數(shù)不確定符號后加'?')
*? -- 0次或多次,盡可能少
+? -- 1次或多次户秤,盡可能少
?? -- 1次或1次码秉,盡可能掃
{M,N}?
{M,}鸡号?
{转砖,N}?

re_str = r'a+'
print(re.search(re_str,'baaaaac'))   # 貪婪
re_str = r'a+?'
print(re.search(re_str,'baaaaac'))  # 非貪婪

3 正則的對象方法

  • compile(正則表達式)
    創(chuàng)建正則表達式對象
re_str = r'\d{3}'
re_obj = compile(re_str)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲸伴,一起剝皮案震驚了整個濱河市府蔗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汞窗,老刑警劉巖姓赤,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仲吏,居然都是意外死亡不铆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門蜘矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狂男,“玉大人综看,你說我怎么就攤上這事品腹。” “怎么了红碑?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵舞吭,是天一觀的道長泡垃。 經(jīng)常有香客問我,道長羡鸥,這世上最難降的妖魔是什么蔑穴? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮惧浴,結(jié)果婚禮上存和,老公的妹妹穿的比我還像新娘。我一直安慰自己衷旅,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膳汪,像睡著了一般渺贤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘁锯,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天宪祥,我揣著相機與錄音,去河邊找鬼家乘。 笑死蝗羊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的仁锯。 我是一名探鬼主播肘交,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扑馁!你這毒婦竟也來了涯呻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤腻要,失蹤者是張志新(化名)和其女友劉穎复罐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雄家,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡效诅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了趟济。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乱投。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顷编,靈堂內(nèi)的尸體忽然破棺而出戚炫,到底是詐尸還是另有隱情,我是刑警寧澤媳纬,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布双肤,位于F島的核電站施掏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茅糜。R本人自食惡果不足惜七芭,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔑赘。 院中可真熱鬧狸驳,春花似錦、人聲如沸缩赛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦筒。三九已至究西,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間物喷,已是汗流浹背卤材。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峦失,地道東北人扇丛。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像尉辑,于是被迫代替她去往敵國和親帆精。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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