python三十八 re模組

2021-08-27 14:21:15 字數 4277 閱讀 1384

正規表示式(re模組)是一種小型的,高度專業化的程式語言。(在python中)它內嵌在python中,並通過re模組實現。正規表示式模組被編譯成一系列位元組碼,然後由用c編寫的匹配引擎執行。

正則就是處理字串的。

1.普通字元:字串本身的方法。比如字串的 find(), split().

2. 元字元:   .^$*+?{}|()\

import re

s = "hellopythonworldpydsonds"

print(re.findall("py..on", s)); # .萬用字元,可以表示任意字元(\n除外)

s = "pythonhelloworldpydsonds"

print(re.findall("^py..on", s)); # ^ 被模糊匹配的字串必須在字串的開頭位置

s = "pythonhelloworlddspydson"

print(re.findall("py..on$", s)); # $ 被模糊匹配的字串必須在字串的末尾位置

s = "pythonheguannnlddspydson"

print(re.findall("guan*", s)); # * 匹配0至無窮次的字元, guan*表示匹配 gua, guan, guann, guannn...(n可以是0個, 0到無窮個,貪婪匹配(盡可能匹配))

s = "pythonheguannnlddspydson"

print(re.findall("guan+", s)); # + 匹配1至無窮次的字元, guan+表示匹配 guan, guann, guannn...(n至少1個, 1到無窮個,貪婪匹配(盡可能匹配))

s = "pythonhegualddspydson"

print(re.findall("guan*", s)); # * 匹配0至無窮次的字元, guan*表示匹配 gua, guan, guann, guannn...(n可以是0個, 0到無窮個,貪婪匹配(盡可能匹配))

s = "pythonhegualddspydson"

print(re.findall("guan+", s)); # + 匹配1至無窮次的字元, guan+表示匹配 guan, guann, guannn...(n至少1個, 1到無窮個,貪婪匹配(盡可能匹配))

s = "pythonhegualddspydson"

print(re.findall("guan?", s)); # ? 匹配0或1個字元, guan?表示只能匹配 gua, guan(只能匹配0個n,或1個n的字元,貪婪匹配(盡可能匹配))

# ==*, ==+, ==?, 用{}可以表示,*,+,?的效果

# 當然{}中可以是任意數字 表示可以匹配0-6個字元, 表示只能匹配6個字元

s = "pythonheguannlddspydson"

print(re.findall("guan", s)); # 表示只能匹配6個字元

s = "pythonheguannlddspydson"

print(re.findall("guan", s)); # 表示可以匹配0-6個字元

s = "pythonheguannnlddspydson"

print(re.findall("guan*?", s)); # 加?,實現惰性匹配(只匹配最少的)

s = "pythonheguannnlddspydson"

print(re.findall("guan+?", s)); # 加?,實現惰性匹配(只匹配最少的)

s = "pythonheguannnlddspydson"

print(re.findall("guan??", s)); # 加?(第乙個?表示元字元,實現模糊匹配,第2個?表示惰性匹配),實現惰性匹配(只匹配最少的)

表示字符集, 在字符集裡有功能的符號: -(範圍) ^(非)  \(轉義)

反斜槓後邊跟元字元去除特殊功能,比如\.

反斜槓後邊跟普通字元實現特殊功能,比如\d

\d 可以匹配任何十進位制數,相當於[0-9]

\d 可以匹配任何非數字字元,相當於[^0-9]

\s 可以匹配任何空白字元,相當於[\t\n\r\f\v]

\s 可以匹配任何非空白字元,相當於[^\t\n\r\f\v]

\w 匹配任何字母數字字元,相當於[a-za-z0-9]

\w 匹配任何非字母數字字元,相當於[^a-za-z0-9]

\b 匹配乙個特殊字元邊界,比如空格, &, #等

s = "pythonheguanfnlddspydson"

print(re.findall("guan[a-z]", s)); # - [a-z],表示字母a到z之間的所有字母

s = "pythonheguan7nnlddspydson"

print(re.findall("guan[^a-z]", s)); # ^表示非, [^a-z],表示不是字母a到z之間的其他字元

s = "1-90+((888*4)/2-5)"

print(re.findall("\d+",s))

print(re.findall("\d+",s))

s = "hello world python!"

print(re.findall("\s+",s))

s = "hello world python!"

print(re.findall("\s+",s))

s = "hello wor%ld pyt*hon! 43&52"

print(re.findall("\w+",s))

s = "hello wor%ld pyt*hon! 43&52&43^87"

print(re.findall("\w+",s))

s = "hello6world"

print(re.findall("hello\.world",s)) # "hello\.world"只能匹配"hello.world"

s = "hello i# i$ world list"

print(re.findall("i\\b", s)) # \b在ascii碼中本身就有特殊含義,如果寫成re.findall("i\b", s),那麼最終傳給re模組的就是轉換過的字元而不是\b

s = "hello i\crld list"

print(re.findall("i\\\\c", s))# python直譯器會轉移一次,變成 "i\\c", 然後re模組再轉移一次,變成"i\c"

分組 "()"

s = "defabdefabdef"

print(re.findall("(def)+", s))

s = "liubei22guanyu21zhangfei20zhaoyun"

print(re.search("(?p[a-z]+)\d+", s).group()) # search()只匹配第乙個符合條件的

print(re.search("(?p[a-z]+)(?p\d+)", s).group("name")) # (?p《名稱》)為分組起名稱

print(re.search("(?p[a-z]+)(?p\d+)", s).group("age")) # (?p《名稱》)為分組起名稱

s = "567abcdfd545"

print(re.match("\d+", s).group()) # 同search, 不過只在字串開始處進行匹配

print(re.split("[ |]", s)) # 分割 ['567', 'abcdf', 'd54', '5']

print(re.sub("\d+","a","12345deffun767ction98")) # 替換

print(re.subn("\d","a","12345deffun767ction98")) # 替換

it = re.finditer("\d+","124abd456def789uio") #返回乙個迭代器

print(it.__next__().group())

print(it.__next__().group())

print(re.findall("www\.(baidu|souhu)\.com", "rtewww.baidu.comrete")) # 優先獲取()匹配的內容, ['baidu']

print(re.findall("www\.(?:baidu|souhu)\.com", "rtewww.baidu.comrete")) # ?:去掉()的優先順序

Python學習之旅(三十八)

mysql是web世界中使用最廣泛的資料庫伺服器。sqlite的特點是輕量級 可嵌入,但不能承受高併發訪問,適合桌面和移動應用。而mysql是為伺服器端設計的資料庫,能承受高併發訪問,同時占用的記憶體也遠遠大於sqlite。由於python的db api定義都是通用的,所以,操作mysql的資料庫 ...

演算法(三十八)

1 使用者模型檔案去重。抖音上不同的使用者型別我們有不同的使用者模型檔案。我們有乙個模型配置檔案,裡面有很多的不同使用者型別和他們對應的模型檔案。我們需要找出每個模型檔案對應的是哪些使用者型別。給定一行輸入,格式為 a ba表示這個使用者的使用者型別,b表示這個使用者對應的模型檔案。請你輸出每個模型...

笨辦法學Python(三十八)

現在去找一些 python 閱讀一下。你需要自己找 然後從中學習一些東西。你學到的東西已經足夠讓你看懂一些 了,但你可能還無法理解這些 的功能。這節課我要教給你的是 如何運用你學到的東西理解別人的 首先把你想要理解的 列印到紙上。沒錯,你需要列印出來,因為和螢幕輸出相比,你的眼睛和大腦更習慣於接受紙...