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

歡迎訪問 生活随笔!

生活随笔

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

python

python3 常用模块_python3-常用模块之re

發布時間:2024/3/13 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 常用模块_python3-常用模块之re 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正則表達式

定義:

正則表達式是對字符串操作的一種邏輯公式,用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。

是一種獨立的規則,獨立的語言。只和字符串打交道。

能做什么?

例子1:把一個文件中所有的手機號碼都找出來;

# open打開文件

# 讀文件str

# 從一長串的字符串中找到所有的11位數字

# 一個字符一個字符的讀

例子2:爬蟲,從網頁的字符串中獲取你想要的數據

例子3:提取特定日志內容

規則

字符組:

[] 寫在中括號中的內容,都出現在下面的某一個字符的位置上都是符合規則的

[0-9] ?匹配數字

[a-z] ?匹配小寫字母

[A-Z] ?匹配大寫字母

[4-9] ?匹配4到9數字

[a-zA-Z] 匹配大小寫字母

[a-zA-Z0-9] 匹配大小寫字母+數字

[a-zA-Z0-9_] 匹配數字字母下滑線

轉義符+元字符

\w ?匹配數字字母下滑線word關鍵字[a-zA-Z0-9_]

\d ?匹配所有的數字digit ????[0-9]

\s ?匹配所有的空白符 回車/換行符 制表符 空格space ?[\n\t ]

\W \D \S 和\w \d \s取反

\b 表示單詞的邊界

[\s\S] [\d\D] [\w\W] 三組全集 意思是匹配所有字符

和轉義字母相關的 元字符

\w \d \s(\n\t) \b \W \D \S

元字符

^ 匹配一個字符串的開始

$ 匹配一個字符串的結束

. 表示匹配除換行符之外的所有字符

[] ?只要出現在中括號內的內容都可以被匹配

[^] 只要不出現在中括號中的內容都可以被匹配

a|b ?或 ?符合a規則的或者b規則的都可以被匹配

# 如果a規則是b規則的一部分,且a規則比b規則要苛刻/長,就把a規則寫在前面

# 將更復雜的\更長的規則寫在最前面

() 分組 ?表示給幾個字符加上量詞約束的需求的時候,就給這些量詞分在一個組

量詞

{n}表示 這個量詞之前的字符出現n次

{n,} 表示這個量詞之前的字符至少出現n次

{n,m} 表示這個量詞之前的字符出現n-m次

? 表示匹配量詞之前的字符出現0次 或者1次 表示可有可無

+ 表示匹配量詞之前的字符出現1次 或者 多次

* 表示匹配量詞之前的字符出現0次 或者 多次

練習:

匹配整數 ?\d+

匹配小數 \d+\.\d+

匹配小數或者整數 ?\d+\.\d+|\d+ ??\d+(\.\d+)?

匹配身份證號(暫不考慮校驗規則):

[1-9]\d{14}(\d{2}[\dX])?

[1-9]\d{16}[\dX]|[1-9]\d{14}

貪婪匹配

在允許的范圍內取最長的結果

非貪婪模式/惰性匹配:在量詞的后面加上?

.*?x ??匹配任意非換行符字符任意長度 直到遇到x就停止

字符+量詞 ???約束一個字符連續出現的次數

字符+量詞+?約束一個字符連續出現的最少次數

字符+量詞+?+x約束一個字符連續出現量詞范圍內的最少次數,遇到x就立即停止

以上都是正則表達式自身的規則,與python沒有毛關系

Re模塊

findall : 匹配所有 每一項都是列表中的一個元素

search : 只匹配從左到右的第一個,得到的不是直接的結果,而是一個變量,通過這個變量的group方法來獲取結果

如果沒有匹配到,會返回None,使用group會報錯

程序中一般都是這樣使用:

match:從頭開始匹配,相當于search中的正則表達式加上一個^

字符串處理的擴展 : 替換 切割

split

sub ?舊的 新的 替換次數

subn 返回一個元組,第二個元素是替換的次數

compile 模塊 節省時間

直接把正則表達式編譯成字節碼,在多次使用的過程中,不會多次編譯

finditer 節省使用正則表達式解決問題的空間/內存

分組

group()表示總體匹配出的內容,group(num)表示匹配出第num個分組

importre

s = "happy every day"res = re.search('()([\w\W]+)(\w+>)',s)

print(res.group()) ?# 所有結果print(res.group(1)) ?# 數字代表第幾個分組print(res.group(2))

print(res.group(3))

輸出

Findall 優先級

ret = re.findall('www.(baidu|sina).com', 'www.sina.com')

print(ret) ?# ['sina'] ????這是因為findall會優先把匹配結果組里內容返回,如果想要匹配結果,取消權限即可ret = re.findall('www.(?:baidu|sina).com', 'www.sina.com')

print(ret) ?# ['www.sina.com']

flags有很多可選值:

re.I(IGNORECASE)忽略大小寫,括號內是完整的寫法

re.M(MULTILINE)多行模式,改變^和$的行為

re.S(DOTALL)點可以匹配任意字符,包括換行符

re.L(LOCALE)做本地化識別的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環境,不推薦使用

re.U(UNICODE) 使用\w \W \s \S \d \D使用取決于unicode定義的字符屬性。在python3中默認使用該flag

re.X(VERBOSE)冗長模式,該模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注釋

總結

以上是生活随笔為你收集整理的python3 常用模块_python3-常用模块之re的全部內容,希望文章能夠幫你解決所遇到的問題。

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