python正則表達式總結

"""author = 陳俊龍"""

==============正則表達式符號============

re模塊主要提供正則相關的方法

import re

1.什么是正則

正則是匹配字符串的一直工具常拓,擁有自己的語法赊淑,語法中包含各種符號的使用

2.正則語法

re.fullmatch(正則表達式,字符串) -
檢測字符串是否完全符合正則規(guī)則(完全匹配)

如果匹配成功返回匹配對象舌厨,如果匹配失敗結果返回None

正則表達式 - python中的正則表達式是寫在引號中的內容橄务,可以是單引號罢吃,也可以是雙引號孤荣,但是一般會在引號前加r止后, r'正則表達式'

3.匹配符號

1)普通字符 - 除了正則中有特色功能和特殊意義以外的其他所以字符

例如:a,b,c,123,~,你....

普通字符在正則表達式中就表示字符本身

re_str = r'abc'
res = re.fullmatch(re_str, 'abc')
print(res)  # <_sre.SRE_Match object; span=(0, 3), match='abc'>

2).(點) - 匹配任意一個字符

正則中出現(xiàn)點.的位置可以匹配任意字符(一個點匹配一個任意字符)

re_str = r'a..c'  # 匹配一個長度是4的字符串,以a開頭葛虐,c結尾胎源,中間任意兩個字符
res = re.fullmatch(re_str, 'a4cc')
print(res)  # <_sre.SRE_Match object; span=(0, 4), match='a4cc'>

3)\w - 匹配任意一個字母,數(shù)字屿脐,下劃線(只針對ASCII碼有效)用得較少涕蚤!

re_str = r'a\wc.'
res = re.fullmatch(re_str, 'a_c6')
print(res)  # <_sre.SRE_Match object; span=(0, 4), match='a_c6'>

4)\s - 匹配一個空白字符

空白字符:空格,回車/換行的诵,制表符

re_str = r'a\sc.'
res = re.fullmatch(re_str, 'a\nc6')
print(res)  # <_sre.SRE_Match object; span=(0, 4), match='a\nc6'>

5) \d - 匹配一個數(shù)字字符

re_str = r'a\dc'
res = re.fullmatch(re_str, 'a6c')
print(res)  # <_sre.SRE_Match object; span=(0, 3), match='a6c'>

6) \大寫字母 - 匹配\小寫字母取反的類容

\W - 匹配非數(shù)字万栅,字母下劃線
\S - 匹配非空白字符
\D - 匹配非數(shù)字字符

re_str = r'a\D\S\Wc'
res = re.fullmatch(re_str, 'a#A#c')
print(res)  # <_sre.SRE_Match object; span=(0, 5), match='a#A#c'>

7) [ ] - 匹配字符集 注意:一個中括號只匹配一個字符

a.普通用法

[字符集] - 匹配字符集中的任意一個字符
例如:
[az1+] - 表示匹配一個字符是中括號中的任意一個字符
[\dabc] - 表示匹配一個數(shù)字或者a b c 中的一個字符

b.表示范圍的字符集

[字符1-字符2] - 匹配字符1到字符2中的任意一個字符,注意西疤,字符2的編碼值必須大于字符1
例如:
[5-9] - 匹配5到9中的任意一個字符
[a-zA-Z] - 匹配任意一個字母
[a-zA-Z\d_] - 匹配字母烦粒,數(shù)字,下劃線

c.表示反向選中[^字符集] - 表示選中除了字符集中以外的其他任意一個字符

任意字符實例:

re_str = r'[abc\d]bc'
res = re.fullmatch(re_str, 'cbc')
print(res)

范圍實例:

re_str = r'[a-zA-Z\d_]bc'
res = re.fullmatch(re_str, '2bc')
print(res)

反向實例:

re_str = r'[^a-zA-Z\d_]bc'
res = re.fullmatch(re_str, '#bc')
print(res)

4.檢測符號

注意:
一個匹配符號必須對應一個具體字符代赁,而檢測符號只是對符號所在位置進行檢查撒遣,不會影響字符串長度

1)\b - 檢測是否是單詞邊界

單詞邊界:
一切可以將兩個單詞區(qū)分開的符號都是單詞邊界,例如單詞開頭管跺,單詞結尾义黎,空白,標點符號等....

print(re.fullmatch(r'how\b are', 'how are'))

2) ^ - 檢查^所在位置是否是字符串開頭

print(re.fullmatch(r'^how are', 'how are'))
print(re.search(r'^are', 'are234'))

3) $$ - 檢查$所在位置是否是字符串結尾

print(re.search(r'\dare$', '123are234are'))  # 如果不加后面$會匹配到3are

==============正則表達式符號2===========

import re

1.匹配次數(shù):

* - 匹配星號*前的字符0次或多次

+ - 匹配加號+前的字符1次或多次

豁跑?- 匹配問號廉涕?前的字符0次或1次

print(re.fullmatch(r'[abc]*', 'aaa'))
print(re.fullmatch(r'[abc]+', 'a'))
print(re.fullmatch(r'[+-]?\d+', '12345'))

{}

{N} - 匹配n次
{M,N} - 匹配m到n次
{M,} - 匹配至少m次
{,N} - 匹配至多N次

print(re.fullmatch(r'a{2}bc', 'aabc'))
print(re.fullmatch(r'a{3,5}bc', 'aaaabc'))
print(re.fullmatch(r'a{3,}bc', 'aaaaaaaaabc'))
print(re.fullmatch(r'a{,5}bc', 'aaaaabc'))

練習:

判斷用戶名和密碼是否合法泻云,用戶名要求必須有數(shù)字字母下劃線,且長度6-20位

print(re.fullmatch(r'[A-Za-z\d_]{6,20}', 'chenjunlong1995'))
print(re.fullmatch(r'[1-9]\d{4,11}', '900000'))

貪婪模式和非貪婪模式:

,+,?,{}對應的匹配次數(shù)都是貪婪的,在匹配次數(shù)不確定的情況下才有貪婪和非貪婪的區(qū)分
在匹配次數(shù)不確定的符號后面加狐蜕?宠纯,就會變成非貪婪:
?,+?,??,{m,n}?

貪婪模式:在匹配成功的前提下,盡可能多的進行匹配

非貪婪:在匹配成功的前提下层释,盡可能少的匹配

貪婪模式實例

result = re.search(r'.+b', '123basdb222b')
print(result)  # match='123basdb222b'>

非貪婪模式實例

result = re.search(r'.+?b', '123basdb222b')
print(result)  # match='123b'

分之

正則表達式1 | 正則表達式2

print(re.fullmatch(r'\d{3}|[a-zA-Z]{3}', 'ZZZ'))

需求:一個字符串最開頭是三個數(shù)字或者三個小寫字母婆瓜,后面大寫字母 分組實例:

print(re.fullmatch(r'(\d{3}|[a-zA-Z]{3})[A-Z]+', 'asdBB'))

4. 分組()

分組() - 將正則中的一部分看成一個整體進行操作
重復 - 添加分組后,可以在分組的后面加上\M來重復前面的第M個分組匹配到的結果

分組實例:

print(re.fullmatch(r'(\d\d:)+\d\d', '19:29:90:88'))

重復實例:

print(re.fullmatch(r'(\d+)abc\1', '12abc12'))
print(re.fullmatch(r'(\d+)([a-z])abc\2', '12aabca'))
print(re.fullmatch(r'(\d+)\1([a-z])abc\2', '1212aabca'))

5.轉義符號 - 在正則符號前加反斜杠\讓符號的功能消失

正則中的轉義符號和字符串的轉義字符串是兩回事

第二種轉義方式:

單獨的特殊符號放在[]中括號中特殊意義也會消失

轉義字符實例:

print(re.fullmatch(r'\.a', '.a'))
print(re.fullmatch(r'\d\+\d', '3+3'))

中括號轉義的實例:

print(re.fullmatch(r'[.]a', '.a'))
print(re.fullmatch(r'\d[+]\d', '3+3'))
print(re.fullmatch(r'[.+*][+]\d', '++3'))
print(re.fullmatch(r'[15-]\d', '-2'))
print(re.fullmatch(r'[a\]]\d', '\6'))  # 匹配不了贡羔?廉白??乖寒?猴蹂??楣嘁?磅轻??逐虚?聋溜??叭爱?

=================re模塊==============

import re

1.創(chuàng)建正則對象

compile(正則表達式) - 根據(jù)正則表達式創(chuàng)建正則對象

2.匹配

fullmatch(正則表達式撮躁,字符串) - 讓整個字符串和正則表達式進行匹配(完全匹配)

match(正則表達式,字符串) - 讓正則表達式的開頭和正則表達式進行匹配

返回值:匹配成功是匹配結果對象涤伐,匹配失敗是None

print(re.match(r'[1-9]{3}', '11111111111'))  # match='111'>

匹配結果

1)能取到匹配結果對應的字符串

匹配對象.group() - 獲取整個正則匹配到的結果

匹配對象.group(N) - 獲取第n個分組匹配到的結果

獲取匹配結果實例:

result = re.match(r'[1-9]{3}', '11111111111')
print(result.group())  # 111
# 取第二個分組匹配到的結果實例:
result = re.match(r'([1-9])([123])', '12')
print(result.group(2))  # 2

2)獲取匹配位置:

匹配對象.span() - 獲取匹配匹配結果在字符串中的開始和結束下標

匹配對象.span(N)
匹配對象.start()
匹配對象.end()

3).獲取原字符串

匹配對象.string - 獲取原來的字符串

3.查找

search(正則表達式馒胆,字符串) -

匹配出字符串中第一個滿足正則表達式的子串缨称,結果是匹配對象

findall(正則表達式凝果,字符串) -

獲取字符串中所有滿足正則表達式的字串,結果是一個列表睦尽,列表中的元素是字符串

finditer(正則表達式器净,字符串) -

獲取字符串中所有滿足正則表達式的字串,結果是一個迭代器,迭代器的元素是匹配對象

result = re.search(r'\d{3}', '123ashdahdb76438hbbd')
print(result.group())  # 123

result = re.findall(r'\d{3}', '123ashdahdb76438hbbd')
print(result)  # ['123', '764']

4.切割

split(正則表達式当凡,字符串) -

按照滿足正則表達式的字串對字符串進行切割山害,返回的是列表
可以使切割更加靈活

str1 = 'aaa0bbb0ccc0ddd'
print(str1.split('0'))  # ['aaa', 'bbb', 'ccc', 'ddd']
# 靈活切割實例
str1 = 'aaa01bbb03ccc05ddd'
print(re.split('\d+',str1))  #  ['aaa', 'bbb', 'ccc', 'ddd']

5.替換

sub(正則表達式,字符串1沿量,字符串2浪慌,替換次數(shù)=0) -

將字符串2中滿足正則表達式的字串替換成字符串1,替換次數(shù)為0時全部替換

str1 = 'aaa01bbb03ccc05ddd'
print(re.sub('\d+', '+', str1))  # aaa+bbb+ccc+ddd
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末朴则,一起剝皮案震驚了整個濱河市权纤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖汹想,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件外邓,死亡現(xiàn)場離奇詭異,居然都是意外死亡古掏,警方通過查閱死者的電腦和手機损话,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槽唾,“玉大人丧枪,你說我怎么就攤上這事∠氖” “怎么了豪诲?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挂绰。 經(jīng)常有香客問我屎篱,道長,這世上最難降的妖魔是什么葵蒂? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任交播,我火速辦了婚禮,結果婚禮上践付,老公的妹妹穿的比我還像新娘秦士。我一直安慰自己,他們只是感情好永高,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布隧土。 她就那樣靜靜地躺著,像睡著了一般命爬。 火紅的嫁衣襯著肌膚如雪曹傀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天饲宛,我揣著相機與錄音皆愉,去河邊找鬼。 笑死艇抠,一個胖子當著我的面吹牛幕庐,可吹牛的內容都是我干的。 我是一名探鬼主播家淤,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼异剥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了絮重?” 一聲冷哼從身側響起冤寿,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤错妖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疚沐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暂氯,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年亮蛔,在試婚紗的時候發(fā)現(xiàn)自己被綠了痴施。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡究流,死狀恐怖辣吃,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情芬探,我是刑警寧澤神得,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站偷仿,受9級特大地震影響哩簿,放射性物質發(fā)生泄漏。R本人自食惡果不足惜酝静,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一节榜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧别智,春花似錦宗苍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敞恋,卻和暖如春丽啡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耳舅。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工碌上, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倚评,地道東北人浦徊。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像天梧,于是被迫代替她去往敵國和親盔性。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容

  • 1.正則基本符號 1.1.什么是正則表達式正則表達式就是字符匹配的工具呢岗;是由正則符號和普通字符組成冕香,來匹配不同規(guī)律...
    未醒的夢_19b0閱讀 451評論 0 0
  • 一.正則表達式 正則表達式就是用來檢測字符串是否滿足某種規(guī)則的工具例如:1.賬號是手機號/郵箱/多少位由什么東西組...
    湯姆貓是只瘋貓閱讀 305評論 0 1
  • Python中的正則表達式(re) import rere.match #從開始位置開始匹配蛹尝,如果開頭沒有則無re...
    BigJeffWang閱讀 7,077評論 0 99
  • 01.正則基本符號 1.什么是正則表達式 正則表達式就是字符匹配的工具;是由正則符號和普通字符組成,來匹配不同規(guī)律...
    Gary134閱讀 531評論 0 0
  • 2019-3-9 姓名:郭祥華 組別:315期六項精進努力一組 【日精進打卡第448】 【知~學習】 背誦《六項精...
    華英雄_712d閱讀 225評論 0 0