python中常用的正規表示式及re模組函式的總結

2021-09-25 22:11:06 字數 1642 閱讀 1502

# todo 首先明白

# ^ 表示從哪開始; ^在 裡面表示否定。

# todo 匹配單個字元

# \d 0~9

# [1-8] 等於 [12345678] [1-36-8] --> [123678] [1-8a-ca-c] -->[12345678abcabc] 中括號裡面的表示範圍

# \w 範圍很廣 英文 數字 中文 _ 都可以匹配(這是因為它是utf-8編碼)但是!?等不行,所以它也只是範圍比較廣罷了。

# \s 空白字元 比如:空格鍵。tab鍵

# . 基本上可以理解為linux的 * 這是是任意的乙個字元,匹配不了換行(\n)。

# ps: 所有的\大寫字母都是它們的補集

# $ 以誰結尾

# ? 代表存在 0或者1個。

# todo 匹配多個字元

# \d 一位數,兩位數,三位數都可以。 \d--->11位數字(此種是滿足{}前面的資料的。比如:a便只有a aa aaa 滿足)

# ?前面的那乙個可有可無

# .* .匹配任意單個字元,唯獨匹配不了換行(\n), * 配皮任意個數,空的也行(+和*的區別便是:+號是一次或者多次,*是零次或者多次)。————————》可以在re.match()的引數中新增乙個re.s便可使.匹配的了\n了。

# todo 特別一點的

# | 相當於 or 但是你用的時候需要括號闊起來 例如:(163|126)代表163和126都可以正確匹配。------>group(引數)可以取出括號中匹配的東西(類似索引)--->這便是分組

# 分組也是可以直接運用到正規表示式裡的。例如:r"<(\w*)>.*" 中的\1是必須要和(\w*)中的資料是一樣的---->這裡的1還是類似於索引的

# 如果覺得索引可能會分不清的話,那麼也是可以給分組起名的。例如 r"(?p\w*).*" ----->p是大寫的

# todo re中的其它模組

# match() 用的最多的。是從頭開始按照正則開始匹配。

# search().group()是不用從頭開始匹配的。 只會匹配第乙個資料,然後就會返回。 比如 \d+ 匹配"sada888dsad999" 只會返回888.----->如果想要達到match()的作用的話 加乙個 ^ 即可

# findall() 不需要用group()了,會以列表的形式返回所有的匹配的資料。

# sub(r"\d+","998","python = 997, c++ = 1024") 它也不需要用group,是先匹配正則,然後將匹配的資料替換了,再返回。----->只要匹配的地方,全部都替換。

# 另外,它還支援函式的呼叫 "998"可以是乙個函式的引用,當成功匹配的時候,需要替換的字串會呼叫這個函式並接收它的返回值。

# split可以切割字串,不需要呼叫group()。例:split(r":| ","info:xiaozhang 33 shanghai") 會返回 ["info","xiaozhang","33","shanghai"].

# todo 正則的貪婪:

# 貪婪模式就是「.+」中的+會一直查詢到最後乙個符合條件的字元。

# 非貪婪模式就是在「.+?",會匹配到第乙個符合條件的字元就停止。

# 舉例:前者會匹配到 234 的 4;後者會匹配到2。

python中常用正規表示式

print re.findall d 123abc 數字 1 2 3 print re.findall d abcaa123abc 非數字 a b c a a a b c print re.findall abc 123abcaaabc abc abc print re.findall aa nab...

python中常用正規表示式

1 匹配字母數字和下劃線 a za z0 9 等價於 w 取非 a za z0 9 等價於 w 2 匹配數字 0 9 等價與 d d 表示任意個數字。取非 0 9 等價與 d u4e00 u9fa5 匹配單個漢字,不含標點符號 u4e00 u9fa5 匹配詞語或以上漢字 取非 u4e00 u9fa5...

Java中常用的正規表示式

public class stringregex 檢查 輸入是否正確 正確格式 012 87654321 0123 87654321 0123 7654321 param value return public boolean checktel string value d d d d 3 d 8 ...