1. 程式人生 > >正則表示式-re模組的使用

正則表示式-re模組的使用

正則表示式的基本使用

一、re模組

正則表示式是用來匹配處理字串的。

python 中使用正則表示式需要引入re模組。

import re

二、search()和match()的區別

match()函式只檢測字元是不是在string的開始位置匹配;search()會掃描整個string查詢匹配。

也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none。

>>> import re
>>> a = 'hello world'
>>> b = re.search('w',a)
>>> b
<_sre.SRE_Match object; span=(6, 7), match='w'>
>>> b.group()
'w'
>>> c = re.match('w',a)
>>> c
>>> d = re.match('h',a)
>>> d
<_sre.SRE_Match object; span=(0, 1), match='h'>
>>> d.group()
'h'
>>>

三、萬用字元

字元

描述

.

匹配除換行符 \n 之外的任何單字元

*

匹配前一個字元出現0次或者無數次,至少0次 貪婪(至多)匹配

+

匹配前一個字元出現一次或者無數次,至少1次 貪婪(至多)匹配

\d

匹配數字,預設只匹配一個

\D

匹配非數字,預設只匹配一個

\s

匹配空格,預設只匹配一個

\S

 匹配非空格,預設只匹配一個

\w

 匹配0-9  a-z  A-Z  _,預設只匹配一個

\W

匹配非0-9  a-z  A-Z  _之外的字元,預設只匹配一個

()

標記一個子表示式的開始和結束位置

[]

滿足[]內任意一個匹配即可,最多隻能匹配一個

?

 非貪婪匹配模式

萬用字元:.

>>> a = 'hello world'
>>> b = re.search('w.',a)
>>> b
<_sre.SRE_Match object; span=(6, 8), match='wo'>
>>> b.group()
'wo'

萬用字元:*和?

>>> a = 'hello world'
>>> b = re.search('w.*',a)
>>> b
<_sre.SRE_Match object; span=(6, 11), match='world'>
>>> b.group()
'world'
>>> c = re.search('w.*?',a)
>>> c
<_sre.SRE_Match object; span=(6, 7), match='w'>

萬用字元:+和?

>>> a = 'hello world'
>>> b = re.search('w.+',a)
>>> b
<_sre.SRE_Match object; span=(6, 11), match='world'>
>>> c = re.search('w.+?',a)
>>> c
<_sre.SRE_Match object; span=(6, 8), match='wo'>

萬用字元:\d和\D

>>> a = '123abc456'
>>> b = re.search('\d',a)
>>> b
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> c = re.search('\D',a)
>>> c
<_sre.SRE_Match object; span=(3, 4), match='a'>
>>> a = '123abc456'
>>> d = re.search('\D*',a)  # 這個結果我理解的應該是abc,不知道為什麼沒有匹配到,匹配前一個字元0次或者更多次,貪婪模式
>>> d   
<_sre.SRE_Match object; span=(0, 0), match=''>    
>>> d = re.search('\D',a)
>>> d
<_sre.SRE_Match object; span=(3, 4), match='a'>
>>> d = re.search('\D\D\D',a)
>>> d
<_sre.SRE_Match object; span=(3, 6), match='abc'>
>>> d = re.search('\D+',a)
>>> d
<_sre.SRE_Match object; span=(3, 6), match='abc'>

四、group使用

功能:分組

group()

返回匹配的整個表示式

group(i)

返回匹配的分組表示式

>>> a = 'helloworldmynameismarry'
>>> b = re.search('(.*)world(.*)',a)
>>> b.group()
'helloworldmynameismarry'
>>> b.group(1)
'hello'
>>> b.group(2)
'mynameismarry'

五、findall使用

findall 提取出來的就是列表物件,不需要使用group()

語法:re.findall(‘想匹配的字元表示式’, string)

a = 'http://www.baidu.com'
b = re.findall('\w',a)
print(b)   # ['h', 't', 't', 'p', 'w', 'w', 'w', 'b', 'a', 'i', 'd', 'u', 'c', 'o', 'm']
print(type(b)) # <class 'list'>

六、sub使用

功能:替換

語法:re.search(‘原string中要被替換的字元’, ‘新字元’,string)

a = 'http://www.baidu.com'
b = re.sub('w','c',a)   # 將w替換成c
print(b)   # http://ccc.baidu.com