Python 正則表達(dá)式(三)

前言

前面兩節(jié)已經(jīng)介紹了Python正則表達(dá)式的語法忠蝗,接下來我們來看看 re 模塊中各種函數(shù)的應(yīng)用

常用函數(shù)

1、search

介紹

re.search(pattern, string, flags=0)

  • pattern: 正則匹配規(guī)則
  • string: 目標(biāo)字符串
  • flags: 匹配模式

掃描整個 字符串 找到匹配樣式的第一個位置,并返回一個相應(yīng)的 匹配對象样漆。

如果沒有匹配到晌缘,就返回 None ;注意這和找到一個零長度匹配是不同的亿鲜。

示例

ans = re.search('abc', 'abcdd')
if ans:
    print('Search result: ', ans.group())
else:
    print('No match')
# out: Search result:  abc` 

2允蜈、match

介紹

re.match(pattern, string, flags=0)

參數(shù)含義同上

如果 string 開始的0或者多個字符匹配到了正則表達(dá)式,就返回一個相應(yīng)的 匹配對象 蒿柳。

如果沒有匹配到饶套,就返回 None ;注意它跟零長度匹配是不同的垒探。

注意:即使在多行模式下凤跑, re.match()也只匹配字符串的開始位置,而不是匹配每行開始叛复。

如果想在 string 的任何位置搜索仔引,可以使用 search() 來替代

示例

ans = re.match('abc', 'abcdd')
if ans:
    print('match result: ', ans.group())
else:
    print('No match')
# out: Match result:  abc

ans = re.match('abc', 'babcdd')
if ans:
    print('match result: ', ans.group())
else:
    print('No match')
# out: No match` 

3扔仓、fullmatch

介紹

re.fullmatch(pattern, string, flags=0)

整個 string 都要匹配到正則表達(dá)式

匹配到就返回一個相應(yīng)的 匹配對象 。否則就返回一個 None

示例

ans = re.fullmatch('abc.dd', 'abcddd')

if ans:
    print('Match result: ', ans.group())
else:
    print('No match')
# out: Match result:  abcddd` 

4咖耘、split

介紹

re.split(pattern, string, maxsplit=0, flags=0)

pattern 去分割 string 翘簇。

如果在 pattern 中捕獲到括號,那么所有的組里的文字也會包含在列表里儿倒。

maxsplit 設(shè)定最多分隔次數(shù)版保, 剩下的字符全部返回到列表的最后一個元素。

示例

# 用非文本字符(字母數(shù)字下劃線)分割
re.split(r'\W+', 'Words, words, words.')
# out: ['Words', 'words', 'words', '']

# 分割字符串也會保留在結(jié)果列表中
re.split(r'(\W+)', 'Words, words, words.')
# out: ['Words', ', ', 'words', ', ', 'words', '.', '']

# 切割一次
re.split(r'\W+', 'Words, words, words.', 1)
# out: ['Words', 'words, words.']

# 以[a-f]之間的字符分割夫否,且不區(qū)分大小寫
re.split('(?i)[a-f]+', '0a3aB9')
re.split('[a-f]+', '0a3aB9', flags=re.IGNORECASE)
# out: ['0', '3', '9']` 

5彻犁、findall

介紹

re.findall(pattern, string, flags=0)

從左到右進(jìn)行掃描,匹配按找到的順序返回凰慈。

如果樣式里存在一個或多個組汞幢,就返回一個組合列表

空匹配也會包含在結(jié)果里。

前面兩節(jié)都是使用 findall 微谓,這里便不再舉例啦森篷。

6、finditer

介紹

re.finditer(pattern, string, flags=0)

findall 差不多豺型,不一樣的地方是:返回一個包含 匹配對象 的迭代器

示例

for ans in re.finditer(r'\w+', 'Words, words, words.'):
    print(ans.group(), end='\t')
# out: Words words words` 

7仲智、sub

介紹

re.sub(pattern, repl, string, count=0, flags=0)

使用 repl 替換 string 中匹配的子串,并返回替換后的字符串姻氨。

如果樣式?jīng)]有找到钓辆,則原樣返回 string

repl 可以是字符串或函數(shù)

  • 字符串:任何反斜杠轉(zhuǎn)義序列都會被處理肴焊,如 \n 會被轉(zhuǎn)換為一個換行符岩馍,其他未知轉(zhuǎn)義序列例如 \& 會保持原樣。向后引用像是 \2 會用樣式中第 2 組所匹配到的子字符串來替換抖韩。

  • 函數(shù):那它會對每個非重復(fù)的 pattern 進(jìn)行調(diào)用蛀恩。這個函數(shù)只有一個 匹配對象 參數(shù),并返回一個替換后的字符串茂浮。

可選參數(shù) count 是要替換的最大次數(shù)双谆,非負(fù),默認(rèn)全部匹配

示例

re.sub('\w+', '123', 'hello, world, hello python')
# out: '123, 123, 123 123'

re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
       r'static PyObject*\npy_\1(void)\n{',
       'def myfunc():')
# out: 'static PyObject*\npy_myfunc(void)\n{'
"""
pattern:匹配 Python 函數(shù)定義
repl: 其中 \1 引用了捕獲的函數(shù)名 myfunc席揽,其他原樣輸出
"""

def dashrepl(matchobj):
    if matchobj.group(0) == '-': 
        return ' '
    else: 
        return '-'

re.sub('-{1,2}', dashrepl, 'pro----gram-files')
# out: 'pro--gram files'` 

8顽馋、subn

介紹

re.subn(pattern, repl, string, count=0, flags=0)

與 sub() 相同,但是返回一個元組 (字符串, 替換次數(shù)).

示例

re.subn('\w+', '123', 'hello, world, hello python')
# out: ('123, 123, 123 123', 4)` 

總結(jié)

好了好了幌羞,一下子講了這么多函數(shù)寸谜,還沒消化呢吧

今天就先講到這里吧。

咱們明天見吧属桦。


image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熊痴,一起剝皮案震驚了整個濱河市他爸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌果善,老刑警劉巖诊笤,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巾陕,居然都是意外死亡讨跟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鄙煤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晾匠,“玉大人,你說我怎么就攤上這事梯刚×构荩” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵乾巧,是天一觀的道長句喜。 經(jīng)常有香客問我预愤,道長沟于,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任植康,我火速辦了婚禮旷太,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘销睁。我一直安慰自己供璧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布冻记。 她就那樣靜靜地躺著睡毒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冗栗。 梳的紋絲不亂的頭發(fā)上演顾,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音隅居,去河邊找鬼钠至。 笑死,一個胖子當(dāng)著我的面吹牛胎源,可吹牛的內(nèi)容都是我干的棉钧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涕蚤,長吁一口氣:“原來是場噩夢啊……” “哼宪卿!你這毒婦竟也來了的诵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤愧捕,失蹤者是張志新(化名)和其女友劉穎奢驯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體次绘,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瘪阁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了邮偎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片管跺。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖禾进,靈堂內(nèi)的尸體忽然破棺而出豁跑,到底是詐尸還是另有隱情,我是刑警寧澤泻云,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布艇拍,位于F島的核電站,受9級特大地震影響宠纯,放射性物質(zhì)發(fā)生泄漏卸夕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一婆瓜、第九天 我趴在偏房一處隱蔽的房頂上張望快集。 院中可真熱鬧,春花似錦廉白、人聲如沸个初。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽院溺。三九已至,卻和暖如春磅轻,著一層夾襖步出監(jiān)牢的瞬間珍逸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工瓢省, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留弄息,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓勤婚,卻偏偏與公主長得像摹量,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355