正則表示式-re模組的使用
阿新 • • 發佈:2018-12-16
正則表示式的基本使用
一、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