01-15正則

一:正則

1.什么是正則表達(dá)式(語法通用)

正則就是一種用來做字符串匹配的工具:他可以通過不同的符號匹配不同的字符

2.python對正則表達(dá)式的支持

通過re模塊提供相應(yīng)支持正則表達(dá)式的方法
a.fullmatch(正則表達(dá)式,字符串) -->用正則表達(dá)式來和指定字符串匹配智蝠,如果匹配成功,返回匹配對象哮翘。匹配失敗返回None
python中的正則表達(dá)式是寫在字符串中的毛秘,但是一般情況下會在最前面加個r/R

import re
def main():

0 普通字符(代表字符本身)
匹配一個字符串,只有三個字符叫挟,每個字符分別是a,s,d

re_str = r'asd' #
result = re.fullmatch(re_str,'asd')
print(result)
1 .(匹配任意字符)

注意:一個 . 代表一個字符≡蹦【【不能匹配 \n
匹配一個字符串奋献,只有三個字符,第一個字符是a,第二個字符是任意字符瓶蚂,第三個字符是c

  re_str = r'a.c'
    result = re.fullmatch(re_str, 'awc')
    print(result)
2 \w(匹配字母數(shù)字下劃線)

注意:也可以匹配中文窃这。【【一個 \w 只能匹配一個字符
匹配一個字符,第一個字符是任意字符疤坝,第二第三個字符是字母數(shù)字或下劃線馆铁,最后三個是asd

re_str = r'.\w\wasd'
    result = re.fullmatch(re_str, 'w_花asd')
    print(result)
3. \s(匹配空白字符)

注意:空白字符,指的是所有能產(chǎn)生空白的字符叼架,包括空格、制表符、換行等

  re_str = r'\w\w\s.' #匹配一個字符串具练,前兩個是字母數(shù)字或下劃線.第三個是空白,最后一個是任意字符
   result = re.fullmatch(re_str, 'qw .')
   print(result)
4. \d(匹配數(shù)字字符)
re_str = r'\d\d\d'  #匹配一個字符串有三個字符串哥遮,每個字符都是數(shù)字字符串
 result = re.fullmatch(re_str, '634')
 print(result)
5. \b (檢測單詞邊界)
檢測正則表達(dá)式中\(zhòng)b所在的位置是否是單詞邊界
 單詞邊界:所有可以將兩個單詞區(qū)分開的符號都是單詞邊界陵究,例如:空格,縮進铜邮,標(biāo)點符號等。單詞開頭結(jié)尾
匹配一個字符串的內(nèi)容是‘how are’,并且要求字符‘a(chǎn)’的前面是單詞邊界

注意:\b 不是匹配符號扔茅,不會匹配出一個字符秸苗,只是檢測所在位置是否滿足要求。

re_str = r'how\b are'
  result = re.fullmatch(re_str, 'how are')
  print(result)
6. ^ (檢測字符串開頭)

匹配一個字符串是三個數(shù)字字符惊楼,并且第一個字符是在字符串開頭

re_str = r'^\d\d\d'
 result = re.search(re_str, '123asdfqwasdf')
 print(result)
7 $(檢測字符串結(jié)尾)

匹配一個字符串是三個數(shù)字字符,并且最后一個字符是在字符串開頭

  re_str = r'\d\d\d$'
    result = re.fullmatch(re_str, '模壓基本原則asd123')
    print(result)
8 \B(檢測非單詞邊界)
re_str = r'asd\B123'
  result = re.fullmatch(re_str, 'asd123')
  print(result)
9 \W (匹配非數(shù)字雅倒、字母攀芯、下劃線和中文)
10 \S (匹配非空白字符)
11 \D (匹配非數(shù)字字符)
12 [字符集] (匹配字符集中的任意一個字符)

注意:一個[]代表一個字符
a. 普通用法
[字符集] - 匹配字符集中的任意一個字符

b.表示范圍
[字符1-字符2] - 匹配字符1到字符2中所有字符。要求字符1的編碼值要小于字符2的編碼值
[a-zA-Z] 所有字母殖演。 [a-zA-Z\d_] 數(shù)字字母下劃線
匹配一個字符串有4個字符,第一個字符是‘a(chǎn)sd’中的一個趴久,后面是123

    re_str = r'[asd]123'
    result = re.fullmatch(re_str, 'a123')
    print(result)

匹配一個字符串有4個字符,第一個字符是1到9中的任意一個灭忠,最后一個是任意小寫字母座硕。中間兩個是任意數(shù)字

 re_str = r'[1-9]\d\d[a-z]' #第一個字符是1到9中的任意一個
    result = re.fullmatch(re_str, '112a')
    print(result)
13 [^字符集] - 匹配非字符集中的其他任意字符

注意:^放在[]里的最前面才表示匹配不在字符集中的其他任意字符;否則就是表示這個字符本身

 第一個字符只要不是asd中的一個其他字符都可以华匾,后面是123 
   re_str = r'[^asd]123'
    result = re.fullmatch(re_str, 'c123')
    print(result)
     [^1-9] 第一個字符除了1到9都可以
    [1-9^] 第一個字符是1到9其中一個或者是^
14 轉(zhuǎn)義符號

a.正則中也可以通過在特殊符號前加‘\’來對符號進行轉(zhuǎn)義
b.除了在中括號中有特殊意義的符號,其他符號放在[]中也是表示符號本身
[.] 表示一個.
- :在中括號中的兩個字符之間表示誰到誰萨西,如果想要表示他本身就不要放在兩個字符之間(加\也可以)
^ :在中括號中的最前面有特殊意義旭旭,如果想要表示他本身就不要放在最前面(加\也可以)
[]:在中括號中表示[],要加 \
注意:轉(zhuǎn)義字符串是字符串中的概念, 轉(zhuǎn)義符號是正則表達(dá)式的概念

re_str = r'\d\d\.\d\d'  # \. 反斜線阻止 . 轉(zhuǎn)義,就是一個點源梭。
print(re.fullmatch(re_str,'23.45'))
if __name__ == '__main__':
    main()

二:匹配次數(shù)

1 *(匹配0次或多次)

字符 * - 指定的字符出現(xiàn)0次或者多次(這兒的字符可以是正則符號际看,也可以是普通字符)
a* - a出現(xiàn)0次或者多次
\d* - 任意數(shù)字出現(xiàn)0次或者多次
[a-z]* - 任意小寫字母出現(xiàn)0次或者多次

 import re
def main():
    re_str = r'a*123'  # 123前面有0個或者多個字符,并且每個字符都是a
    print(re.fullmatch(re_str,'aaaaaa123'))

    re_str = r'\d*123' #123前面有0個或者多個字符仲闽,并且每個字符都是數(shù)字字符
2 +(匹配一次或多次)
    re_str = r'a+123'  # 123前面有1個或者多個字符,并且每個字符都是a
    print(re.fullmatch(re_str, 'aaaaaa123'))

    re_str = r'\d+123'
3 ?(匹配0次或者1次)
    #練習(xí):寫一個正則表達(dá)式屑彻,能夠匹配所有的整數(shù)字符串顶吮。
    re_str = r'[-+]?[1-9]\d*'     # 123  -123  +123
    print(re.fullmatch(re_str, '123'))
4 {}
    {M,N} - 匹配M到N次(最少M次,最多N次)
    {M,} - 匹配至少M次
    {,N} - 匹配最多N次
    {N} - 匹配N次
    print(re.fullmatch(r'a{2,5}','aaa'))
    #密碼;6-16位悴了,只能包含數(shù)字和字母
    print(re.fullmatch(r'[a-zA-Z\d]{6,16}','asdfwq123'))
if __name__ == '__main__':
    main()

三:分之與分組

  1. | (分之)
    表達(dá)式1 | 表達(dá)式2 | 表達(dá)式3 - 先用表達(dá)式1進行匹配,匹配成功就成功熟空;如果不成功則依次使用后面的表達(dá)式去匹配,有一個匹配成功就成功掂咒。(三個表達(dá)式中只要有一個能匹配成功就成功,否則失斏芄巍)
def main():
    re_str = r'[a-z]{3}|\d{3}'   #中間不能隨意加空格挨摸,意義不一樣
    print(re.fullmatch(re_str,'132'))

a.分組 - 將括號里的內(nèi)容看成一個整體,

b.分組重復(fù) - 在有分組的正則表達(dá)式中可以在分組的后面通過 '\數(shù)字' 來重復(fù)第幾個分組匹配到的內(nèi)容
(\d{2})asd\1 ---> 78asd78 #\1 - 前面第一個分組重復(fù)一次 #\1{2} 第一個分組重復(fù)2次

re_str = r'asd([A-Z]{2}|\d{2})'  # 小括號分組
print(re.fullmatch(re_str,'asdKD'))
re_str = r'(asd){2}'  # asd整體出現(xiàn)2次  [[r'asd{2}' == asdd
print(re.fullmatch(re_str,'asdasd'))
分組重復(fù)
re_str = r'(\d{2})asd'
print(re.fullmatch(re_str,'34asd34'))
if __name__ == '__main__':
    main()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫉戚,一起剝皮案震驚了整個濱河市澈圈,隨后出現(xiàn)的幾起案子帆啃,更是在濱河造成了極大的恐慌,老刑警劉巖努潘,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯坤,死亡現(xiàn)場離奇詭異,居然都是意外死亡压怠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門蜗顽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雨让,“玉大人,你說我怎么就攤上這事栖忠∶辰郑” “怎么了狸相?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵卷哩,是天一觀的道長。 經(jīng)常有香客問我将谊,道長,這世上最難降的妖魔是什么尊浓? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任栋齿,我火速辦了婚禮,結(jié)果婚禮上瓦堵,老公的妹妹穿的比我還像新娘。我一直安慰自己澜驮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布杂穷。 她就那樣靜靜地躺著卦绣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廊蜒。 梳的紋絲不亂的頭發(fā)上蜗搔,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音樟凄,去河邊找鬼。 笑死汰现,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瞎饲。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼妄田,長吁一口氣:“原來是場噩夢啊……” “哼驮捍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起东且,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤珊泳,失蹤者是張志新(化名)和其女友劉穎鲁冯,沒想到半個月后色查,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡涣仿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉镰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡录择,死狀恐怖碗降,靈堂內(nèi)的尸體忽然破棺而出隘竭,到底是詐尸還是另有隱情讼渊,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布菱皆,位于F島的核電站,受9級特大地震影響仇轻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祭椰,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一疲陕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸭轮,春花似錦、人聲如沸邑蒋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逮京。三九已至,卻和暖如春懒棉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穗慕。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工妻导, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倔韭。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓寿酌,卻偏偏與公主長得像胰苏,于是被迫代替她去往敵國和親份名。 傳聞我的和親對象是個殘疾皇子妓美,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

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