日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python正则表达式,看完这篇文章就够了...

發布時間:2025/3/8 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python正则表达式,看完这篇文章就够了... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正則的噩夢...

正則表達式這東西,你說它簡單它也簡單,你說它難吧,確實不容易。為什么?這東西就是死記硬背的。背過了相關的語法,使用起來就so easy。但記不熟語法,就犯難了。網上關于python正則的帖子很多,我再去寫壓力比較大,盡可能的總結詳細一些吧!

正則表達式簡介

正則表達式,是一個特殊的字符序列,又稱規則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp 或RE),本質而言是一種小型的,高度專業化的編程語言。
Python 自1.5版本起增加了re 模塊,re 模塊使Python語言擁有全部的正則表達式功能。

正則語法表

關于正則語法表,別想其他的都背過就行了。不管你是python還是其他的語言都是一樣的,所以背不過就抄到記住為止!這個你背不過,再好的教程看了也沒用。如何巧記?我們需要對其進行分類。

  • 開頭結尾

這一對標簽,大家都不會陌生…

模式描述
^從整個字符串開頭的地方匹配
$從整個字符串的結尾開始匹配
  • 模糊匹配

模式描述
.匹配任意字符,除了換行符
re?重復匹配?號前面0個或1個由前面的正則表達式定義的片段,非貪婪方式
re*重復匹配*號前面0個或多個的表達式。
re+重復匹配+號前面1個或多個的表達式。
a丨b匹配a或b
  • 關于括號

模式描述
{}表示匹配"{}"前邊的字符 指定個數為"{}"里邊的數值
[]表示一個字符集,它常被用來指定一個字符類別,字符可以單個列出,也可以用“-”號分隔的兩個給定字符來表示一個字符區間
()分組 將括號中的內容 當作整體來對待
  • "\" 反斜杠的應用

模式描述
\w匹配字母數字及下劃線
\W匹配非字母數字及下劃線
\s匹配任意空白字符,等價于 [\t\n\r\f].
\S匹配任意非空字符
\d匹配任意數字,等價于 [0-9].
\D匹配任意非數字
\A匹配字符串開始
\Z匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。
\z匹配字符串結束
\G匹配最后匹配完成的位置。
\b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等.匹配一個換行符。匹配一個制表符。等
\1…\9匹配第n個分組的內容。
\10匹配第n個分組的內容,如果它經匹配。否則指的是八進制字符碼的表達式。
  • 其他

模式描述
(?imx)正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區域。
(?-imx)正則表達式關閉 i, m, 或 x 可選標志。只影響括號中的區域。
(?: re)類似 (…), 但是不表示一個組
(?imx: re)在括號中使用i, m, 或 x 可選標志
(?-imx: re)在括號中不使用i, m, 或 x 可選標志
(?#…)注釋.
(?= re)前向肯定界定符。如果所含正則表達式,以 … 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
(?! re)前向否定界定符。與肯定界定符相反;當所含表達式不能在字符串當前位置匹配時成功
(?> re)匹配的獨立模式,省去回溯。

re模塊用法

re.(function)(pattern[, flags])
pattern : 一個字符串形式的正則表達式
flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為:

  • re.I 忽略大小寫

  • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環境

  • re.M 多行模式

  • re.S 即為 . 并且包括換行符在內的任意字符(. 不包括換行符)

  • re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數據庫

  • re.X 為了增加可讀性,忽略空格和 # 后面的注釋

    • findall() (即:全部找到,返回的是一個列表)

    findall(string[, pos[, endpos]])
    參數:

  • string : 待匹配的字符串。

  • pos : 可選參數,指定字符串的起始位置,默認為 0。

  • endpos : 可選參數,指定字符串的結束位置,默認為字符串的長度。

  • import?re s?=?'helloworld?hellobeijing' ret?=?re.findall('hello\S+',s) print(ret) ['helloworld',?'hellobeijing']
    • finditer()

    和 findall 類似,在字符串中找到正則表達式所匹配的所有子串,并把它們作為一個迭代器返回。
    re.finditer(pattern, string, flags=0)
    參數:

    參數描述
    pattern匹配的正則表達式
    string要匹配的字符串。
    flags標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等
    • search() 與 match()

    相同點:

  • 語法:re.search/match(pattern, string, flags=0)

  • 函數參數說明:

  • 參數描述
    pattern匹配的正則表達式
    string要匹配的字符串。
    flags標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等
  • 可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

  • 匹配方法描述
    group(num=0)匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組
    groups()返回一個包含所有小組字符串的元組,從 1 到 所含的小組號
    start([group])方法用于獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引),參數默認值為 0
    end([group])方法用于獲取分組匹配的子串在整個字符串中的結束位置(子串最后一個字符的索引+1),參數默認值為 0
    span([group])方法返回 (start(group), end(group)
    import?re #?re.search ret?=?re.search('h..','hello?hello?world') print(ret)?#?輸出結果:<_sre.SRE_Match object; span=(0, 3), match='hel'> ret1?=?re.search('h..','hello?hello?world').group() print(ret1)?#?輸出結果:hel 只輸出第一個符合條件的結果#?re.match ret?=?re.match('asd','asdhskdjfksji') print(ret)?#?輸出結果:<_sre.SRE_Match object; span=(0, 3), match='asd'>返回的是一個對象。 ret1?=?re.match('asd','asdhskdjfasdksjiasd').group() print(ret1)?#?輸出結果:asd 調用.group()方法,只返回匹配的第一個結果。

    不同點:

  • re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None

  • re.search匹配整個字符串,直到找到一個匹配

  • #?re.search s?=?'helloworld?hellobeijing' ret?=?re.search('hellob\S+',s) print(ret) <re.Match?object;?span=(11,?23),?match='hellobeijing'>#?re.match s?=?'helloworld?hellobeijing' ret?=?re.match('hellob\S+',s) print(ret) None
    • split() 分隔符 對比字符串里邊的split方法。

    split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:

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

    參數描述
    pattern匹配的正則表達式
    string要匹配的字符串。
    maxsplit分隔次數,maxsplit=1 分隔一次,默認為 0,不限制次數。
    flags標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。參見:正則表達式修飾符 - 可選標志
    import?re s?=?'helloworld?hellobeijing' ret?=?re.split('hello',s) print(ret) ['',?'world?',?'beijing']
    • sub() 替換;類似字符串中的replace()方法。

    re.sub用于替換字符串中的匹配項。
    語法:
    re.sub(pattern, repl, string, count=0, flags=0)
    參數:

  • pattern : 正則中的模式字符串。

  • repl : 替換的字符串,也可為一個函數。

  • string : 要被查找替換的原始字符串。

  • count : 模式匹配后替換的最大次數,默認 0 表示替換所有的匹配。

  • import?re s?=?'helloworld?hellobeijing' ret?=?re.sub('hello','goodbye',s) print(ret) goodbyeworld?goodbyebeijing
    • compile(strPattern[,flag]): 這個方法是Pattern類的工廠方法,用于將字符串形式的正則表達式編譯為Pattern對象

    compile 函數用于編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。
    語法格式為:
    re.compile(pattern[, flags])
    參數:
    pattern : 一個字符串形式的正則表達式

  • flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為:

  • re.I 忽略大小寫

  • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環境

  • re.M 多行模式

  • re.S 即為 . 并且包括換行符在內的任意字符(. 不包括換行符)

  • re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數據庫

  • re.X 為了增加可讀性,忽略空格和 # 后面的注釋

  • import?re pattern?=?re.compile('he.{3}') pattern.match(s) <re.Match?object;?span=(0,?5),?match='hello'>

    往期精彩回顧 那些年做的學術公益-你不是一個人在戰斗適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊備注:加入本站微信群或者qq群,請回復“加群”加入知識星球(4500+用戶,ID:92416895),請回復“知識星球”

    總結

    以上是生活随笔為你收集整理的python正则表达式,看完这篇文章就够了...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。