正規表示式的一些總結

2021-10-11 11:59:51 字數 3525 閱讀 4636

有沒有^$的區別

最好不用*而使用+

貪婪匹配(最大匹配)和最小匹配

正規表示式就是根據共性的特徵寫正規表示式,然後根據此式去匹配字串,返回符合這些特徵的字串

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

在乙個字串中搜尋匹配正規表示式的第乙個位置,返回match物件.匹配了乙個就結束了

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

從乙個字串的開始位置起(必須開頭位置要匹配上)匹配正規表示式,返回match物件。匹配了乙個就結束了

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

搜尋字串,以列表型別返回全部能匹配的子串,返回列表型別

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

將乙個字串按照正規表示式匹配結果進行分割,返回列表型別。預設全部分割

re.finditer()

搜尋字串,返回乙個匹配結果的迭代型別,每個迭代元素是match物件

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

在乙個字串中替換所有匹配正規表示式的子串,返回替換後的字串

regex = re.compile(pattern, flags=0)

將正規表示式的字串形式編譯成正規表示式物件regex物件,之前的方法返回的是match物件或者是字串列表match物件只有在下面的呼叫之後才會出現。

match物件是一次匹配,匹配乙個就ok了就結束了。

regex.search()

在乙個字串中搜尋匹配正規表示式的第乙個位置,返回match物件

regex.match()

從乙個字串的開始位置起匹配正規表示式,返回match物件

regex.findall()

搜尋字串,以列表型別返回全部能匹配的子串

regex.split()

將乙個字串按照正規表示式匹配結果進行分割,返回列表型別

regex.finditer()

搜尋字串,返回乙個匹配結果的迭代型別,每個迭代元素是match物件

regex.sub()

在乙個字串中替換所有匹配正規表示式的子串,返回替換後的字串

m=re.search(pattern=r'[a-z][a-z]+[a-z][a-z]+'

,string=

'duanhao,duanhao,zhangding,zhangding,zhang ding'

)print

(m.group())

duanhao

type

(m)<

class

're.match'

>

m=re.findall(pattern=r'[a-z][a-z]+[a-z][a-z]+'

,string=

'duanhao,duanhao,zhangding,zhangding,zhang ding'

)print

(m)[

'duanhao'

,'zhangding'

]type

(m)<

class

'list'

>

m=re.split(r'\d'

,'asdf12455sdf84752ksdjf43976sdfjl')m

['asdf'

,'5sdf'

,'2ksdjf'

,'6sdfjl'

]for m in re.finditer(r'\d'

,'asdf12455sdf84752ksdjf43976sdfjl'):

...print

(m.group())

1245

8475

4397

m=re.sub(r'\d+'

,'love'

,'zhangfjla1245duandksfj')m

'zhangfjlaloveduandksfj'

[a-z]

可以用來匹配任意位置上的小寫字母: 「…a…」,中間內容匹配就行

^ [a-z]

只能匹配以小寫字母為行首的行: 「a…」,必須開頭位置就要匹配

[a-z]$

只能匹配以小寫字母為行尾的行: 「…a」

m=re.findall(r'\d+'

,'12999hk768')m

['12999'

,'768'

]m=re.findall(r'\d*'

,'12999hk768')m

['12999',''

,'','768',''

]#字母和結尾都為none也可以被匹配到,因為*是0或者n多,+是1或者n多

m=re.findall(r'\d*'

,'12999hk768aaa')m

['12999',''

,'','768',''

,'',''

,'']

regular=re.

compile

(r'py.*n'

)type

(regular)

#可以看到regex物件的本質就是正規表示式,別看到regex就認為是新的一種東西

<

class

're.pattern'

>

type

(r'14'

)#雖然我們認為r'***x'就是正規表示式,但是它本身是原生字串!只是我們大腦自動把它進行編譯compile為正規表示式pattern

<

class

'str'

>

regular.search(

'123py12345n12345n12npy2456n12'

)#(r'py.*n')是貪婪匹配

; span=(3

,27), match=

'py12345n12345n12npy2456n'

>

new_regular=re.

compile

(r'py.*?'

)type

(new_regular)

<

class

're.pattern'

>

new_regular.search(

'123py12345n12345n12npy2456n12'

)#(r'py.*?')是最小匹配

; span=(3

,5), match=

'py'

>

(加乙個問號,都是針對那些有無窮多解,無窮多種匹配結果的)

*?前乙個字元0次或無限次擴充套件,最小匹配

+?前乙個字元1次或無限次擴充套件,最小匹配

??前乙個字元0次或1次擴充套件,最小匹配

?擴充套件前乙個字元m至n次(含n),最小匹配

一些正規表示式

要嚴格的驗證手機號碼,必須先要清楚現在已經開放了哪些數字開頭的號碼段,目前國內號碼段分配如下 移動 134 135 136 137 138 139 150 151 157 td 158 159 187 188 聯通 130 131 132 152 155 156 185 186 電信 133 153...

一些正規表示式

判斷是否是正整數if isnan paramvalue paramvalue 0 else 金額的格式判斷輸入金額的要求 整數字最多十位,小數為最多為兩位,可以無小數字 0 9 1 9 0 9 0 9 function checkmoney str 0 9 if re.test str else 手...

一些正規表示式

記錄一下 以防忘記 string hello 123 4567 world this is a regsssss res re.match w s d s d s w string 匹配到 hello 123 4567 world this 其中 代表乙個字串的開始 代表乙個字串的結尾 w 匹配字母...