python學習筆記 十一 正規表示式

2021-08-24 18:17:11 字數 2373 閱讀 3482

一.基礎知識:

\d 匹配乙個數字

\w 匹配乙個字母或數字

. 匹配任意字元

* 表示任意個字元

+ 表示至少乙個字元

? 表示0個或1個字元

表示n個字元, 表示n - m個字元

\s 表示匹配乙個空格(包括tab等空白符),\s+表示至少乙個空格

[0-9a-za-z\_] 可以匹配乙個數字、字母或者下劃線

[0-9a-za-z\_]+ 可以匹配至少由乙個數字、字母或者下劃線組成的字串

[a-za-z\_][0-9a-za-z\_]* 可以匹配由字母或下劃線開頭,後接任意個由乙個數字、字母或者下劃線組成的字串

[a-za-z\_][0-9a-za-z\_] 限制前面只有乙個字元+後面最多19個字元

a|b可以匹配a或b

^ 表示行的開頭

$ 表示行的結束

注意:特殊字元需要用\進行轉義,但如果使用python的r字首,就不用考慮轉義的問題。

二.re模組

match方法判斷是否匹配,如果匹配成功,返回乙個match物件,否則返回none

import re

test='010-12345'

if re.match(r'^\d-\d$', test):

print 'ok'

else:

print 'failed'

三.切分字串

用正規表示式切分字串更為靈活:

import re

# 常規切分 ['a', 'b', '', '', 'c']

print 'a b c'.split(' ')

# 使用正則, 可以識別連續空格 ['a', 'b', 'c', 'd']

print re.split(r'[\s\,]+', 'a,b, c d')

# 使用正則, 可以識別按照多個字元切分 ['a', 'b', 'c', 'd']

print re.split(r'[\s\,\;]+', 'a,b;; c d')

四.分組

正規表示式有提取子串的功能,使用()表示要提取的分組(group)

如下:可以從匹配的字串中提取出區號和本地號碼

import re

m = re.match(r'^(\d)-(\d)$', '010-12345')

print m.group(0) # '010-12345'

print m.group(1) # '010'

print m.group(2) # '12345'

五.貪婪匹配

正則匹配預設是貪婪匹配,也就是盡可能多的字元:

import re

print re.match(r'^(\d+)(0*)$', '102300').groups()

# ('102300', '')

由於\d+採用貪婪匹配,直接把後面的0全部匹配了,結果0*只能匹配空字串了。

必須讓\d+採用非貪婪匹配,也就是盡可能少匹配,才能把後面的0匹配出來,加個?就可以讓\d+採用非貪婪匹配

re.match(r'^(\d+?)(0*)$', '102300').groups()   # ('1023', '00')

六.編譯

當我們在python中使用正規表示式時,re模組內部會幹兩件事情:

1. 編譯正則,如果正則的字串本身不合法,會報錯;

2.用編譯後的正則去匹配字串

如果乙個正則要重複使用很多次,出於效率考慮,我們可以進行預編譯,下次使用就不用編譯了

import re

# 編譯:

re_telephone = re.compile(r'^(\d)-(\d)$')

# 使用:

re_telephone.match('010-12345').groups() #('010', '12345')

re_telephone.match('010-8086').groups() #('010', '8086')

python學習筆記 十一 正規表示式

一.基礎知識 d 匹配乙個數字 w 匹配乙個字母或數字 匹配任意字元 表示任意個字元 表示至少乙個字元 表示0個或1個字元 表示n個字元,表示n m個字元 s 表示匹配乙個空格 包括tab等空白符 s 表示至少乙個空格 0 9a za z 可以匹配乙個數字 字母或者下劃線 0 9a za z 可以匹...

18十一正睿筆記

前提 滿足四邊形不等式 若i a b i a b w a,j i,j w a b w i,b w a,j w i,b w a j i,j w a b 相當於決策點是不降的。把序列分成k段,每段的價值為w i j w i,j w i,j ex 和的平方 d pi k m in d pj,k 1 w j...

standford NLP課程筆記一 正規表示式

課程位址 裡面的字元表示每個都可以,比如 ww oodchuck 可以表示woodchuck和woodchuck 1234567890 表示任何單個數字 表示範圍的 a z 表示所有大寫字母 a z 表示所有小寫字母 0 9 表示所有單個數字 表示否定的 a z 不要大寫的字母 a z 不要小寫的字...