1. 程式人生 > >python re正則表達式基本使用介紹

python re正則表達式基本使用介紹

python re正則表達式基本使用介紹

何為正則表達式?

正則表達式為高級的文本模式匹配、抽取、與/或文本形式的搜索和替換功能提供了基礎。

簡單來說,正則表達式(Regular Expression,簡稱regex)是一些由字符和特殊符號組成的字符串,它們描述了模式的重復或者表述多個字符,正則表達式能按照某種模式匹配一系列有相似特征的字符串。


python re模塊提供正則功能

以下是一些基本使用:

#正則表達式元字符

1) . (通配符)除了換行符外均可代指

#ret = re.findall(‘w..l‘,s)
#print ret

2) ^ 開始匹配(從開頭開始匹配)

#ret = re.findall(‘^h...o‘,‘hejaodflhello‘)
#print(ret)

3) $ 從結尾匹配

# ret = re.findall(‘a..x$‘,‘afjdlajfa faf alox‘)
# print ret

4) * 重復匹配(*前字符[0 正無窮多])

# ret = re.findall(‘ab*‘,‘falfa;ldfafbaalexlil‘)
# print(ret)

5) + 匹配重復[1, 無窮多]

# ret = re.findall(‘ab+‘,‘falfa;ldfabfbaabbleab2xlil‘)
# print(ret)
# ret = re.findall(‘a+b‘,‘falfa;ldfabfbaabbleab2xla2bil‘)
# print ret

6) ? [0,1] 次

# ret = re.findall(‘a?b‘,‘falfa;ldfabfbaabblea3b2xlil‘)
# print ret

7) { } 指定前面字符出現的次數

# ret = re.findall(‘a{5}b‘,"abxkaaaaab,abbbbbaaabblfjdasssssbwl")
# print ret
# ret = re.findall(‘a{1,3}b‘,"abxkaaab,abbbbbabblfjdaabwl")
# print ret

8) 字符集及範圍匹配 [ ]

#或關系選取

# ret = re.findall(‘a[c,d]x‘,‘acxbaadx‘)
# print ret

範圍選取

[0-9] 等同於\d 匹配任何十進制數字 \D與之相反匹配任何非數值型的數字

[a-z] 匹配小與字母

[A-Z]匹配大寫字母

[a-zA-Z0-9] 等同於 \w 匹配任何字母數字和字符 \W與之相反

\s 匹配任何空格字符 等同於[\n\t\r\v\f] \S 與之相反



# ret = re.findall(‘[a-z]‘,‘abcdef‘)
# print ret

#[ ]取消元字符的特殊功能有三例除外(\ ^ -)

# ret = re.findall(‘[w,*,.,,]‘,‘wa,x.dx*‘)
# print ret
#取數字大小寫字母
# ret = re.findall(‘[0-9a-zA-Z]‘,‘123tsAD‘) 
# print ret
#結果:[‘1‘, ‘2‘, ‘3‘, ‘t‘, ‘s‘, ‘A‘, ‘D‘]

總結:
* 等同於 {0,無窮多} 也等價於 {0,}
+ 等價於 {1,無窮} 也等價於 {1,}
? 等價於 {0,1}


取反

# ret = re.findall(‘^t‘,‘t12iu3tsAD‘)   #正常的取t開頭的字符t
# print ret
# ret = re.findall(‘[^t,3]‘,‘t12iu3tsAD‘)    #取除t或3外的字符
# print ret
#結果: [‘1‘, ‘2‘, ‘i‘, ‘u‘, ‘s‘, ‘A‘, ‘D‘]

\ 反斜杠功能
#功能有二:
#反斜杠後邊跟隨元字符去除特殊功能
#反斜杠後跟部分普通字符實現特殊功能


#\b 匹配邊界 任何特殊字符邊界

# print(re.findall(r‘I\b‘,‘Hello,I am a LI$sT.I,‘))
#結果:[‘I‘, ‘I‘, ‘I‘]
# print(re.findall(r‘\bI‘,‘Hello Iam a LI$sTI,‘))
#結果: [‘I‘]

re的常用方法

1、re.match方法

只在字符串開始匹配,也返回匹配到的第一個對象,匹配到返回

否則返回None

obj = re.compile("\.com")
ret = obj.match("
print ret  #結果None


2、re.search方法與re.findall
#re.search() 符合第一個條件的,返回對象,並通過group方法獲取匹配到的結果

#re.findall() 把所有符合的結果放入列表 中。

# ret = re.search(‘(?P<id>\d{3})/(?P<name>\w{3})‘,‘weeew34tttt123/pppp‘)
# print(ret.group())  #結果:123/ppp
# print(ret.group(‘id‘))   #結果:123
# print(ret.group(‘name‘))  #結果 ppp
#ret = re.findall(‘(?P<id>\d{3})/(?P<name>\w{3})‘,‘weeew34tttt123/pppp‘)# print ret 
#結果是所符合的存在於列表中:[(‘123‘, ‘ppp‘)]

3、re.compile 先編譯成匹配對象可以供其他方法多次調用

obj = re.compile(‘\.com‘)ret = obj.findall("www.baidu.com,https://www.google.com.cn")print ret   #結果[‘.com‘, ‘.com‘]
ret = obj.search(www.baidu.com,https://www.google.com.cn).group()
print ret   #結果.com

本文只是簡單說明了正則表達式的基本應用。更多擴展用法請參考這裏。https://deerchao.net/tutorials/regex/regex.htm

本文出自 “學無止境,學以致用” 博客,請務必保留此出處http://dyc2005.blog.51cto.com/270872/1981625

python re正則表達式基本使用介紹