re模塊操作
在Python中需要通過正則表達(dá)式對(duì)字符串進(jìn)行匹配的時(shí)候歇终,要用到一個(gè)模塊尚辑,名字為re
1.re模塊的使用過程
導(dǎo)入re模塊
import re
使用match方法進(jìn)行匹配
result=re.match('正則表達(dá)式','要匹配的字符串')
如果上一步匹配到數(shù)據(jù)的話勿锅,可以使用group方法來提取數(shù)據(jù)
result.group
2.re模塊示例
import re
result = re.match('baidu','baidu.com')
print(result.group())
表示字符
<colgroup><col style="width: 385px;"><col style="width: 385px;"></colgroup>
示例一:.
import re
匹配任意一個(gè)字符
ret=re.match('.','a')
print(ret.group())
示例二:[]
import re
如果hello的首字母小寫鸭你,那么正則表達(dá)式需要小寫的h
ret=re.match('h','hello python')
print(ret.group())
如果hello的首字符大寫爽彤,那么正則表達(dá)式需要大寫的H
ret=re.match('H','hello python')
print(ret.group())
大小寫都可以的情況
ret= re.match('[hH]','hello python')
ret2=re.match('[hH]','hello python')
print(ret.group())
print(ret2.group())
匹配0-9的第一種方法
ret=re.match([0123456789],'7hello python')
print(ret.group())
匹配0-9的第二種方法
ret=re.match([0-9],'7hello python')
print(ret.group())
示例三 \d
import re
普通的匹配方式
ret=re.match('天空1號(hào)','天空1號(hào)發(fā)射成功')
print(ret.group())
使用\d進(jìn)行匹配
ret=ret.match('天空\d號(hào)','天宮1號(hào)發(fā)射成功')
原始字符串
[圖片上傳失敗...(image-60efdd-1523883048420)]
match里面4個(gè)反斜杠輸出一個(gè)反斜杠,前兩個(gè)\和后兩個(gè)\分別用于在編程語言里轉(zhuǎn)化成一個(gè)\昂利,之后在正則表達(dá)式里轉(zhuǎn)化為一個(gè)\
表示數(shù)量
匹配多個(gè)字符的相關(guān)格式
<colgroup><col style="width: 130px;"><col style="width: 278px;"></colgroup>
|
示例1 *****
匹配出一個(gè)字符串第一個(gè)為大寫字母届腐,后面都是小寫字母铁坎。并且這些字符串可有可無
[圖片上傳失敗...(image-d45570-1523883048418)]
示例2:?
需求:匹配出犁苏,0-99之間的數(shù)字
[圖片上傳失敗...(image-525e8a-1523883048419)]
示例3:{m}
需求:匹配出硬萍,8到20位的密碼,可以是大小寫英文字母围详、英文字母朴乖,下劃線
[圖片上傳失敗...(image-755a8e-1523883048419)]
表示邊界
<colgroup><col style="width: 385px;"><col style="width: 385px;"></colgroup>
示例 |
ret = re.match("[1-9]?\d$|100","8")
ret.group()
ret = re.match("[1-9]?\d$|100","78")
ret.group()
ret = re.match("[1-9]?\d$|100","08")
ret.group()
ret = re.match("[1-9]?\d$|100","100")
ret.group()
示例2()
ret = re.match("\w{4,20}@163.com", "test@163.com")
ret.group()
ret = re.match("\w{4,20}@(163|126|qq).com", "test@126.com")
ret.group()
ret = re.match("\w{4,20}@(163|126|qq).com", "test@qq.com")
ret.group()
ret = re.match("\w{4,20}@(163|126|qq).com", "test@gmail.com")
ret.group()
示例3\
ret = re.match("<[a-zA-Z]>\w</[a-zA-Z]*>", "<html>hh</html>")
ret.group()
re模塊的高級(jí)用法
search 需求:匹配出文章閱讀的次數(shù) (匹配單次)[圖片上傳失敗...(image-60b654-1523883048420)]
findall 需求:統(tǒng)計(jì)出Python、c助赞、c++相應(yīng)文章閱讀的次數(shù)(可以匹配多次)
[圖片上傳失敗...(image-5a0bf0-1523883048420)]
sub 將匹配到的數(shù)據(jù)進(jìn)行替換
需求:將匹配的閱讀次數(shù)加1
方法1:
import re
ret= re.sub(r"\d+","python=997")
print ret
方法2:
import re
def add(temp):
strnum = temp.group()
num = int(strnum)+1
return str(num)
ret = re.sub(r"\d+",add,"python=997")
print ret
ret = re.sub(r"\d+",add,"python=99")
print ret
split 根據(jù)匹配進(jìn)行切割字符串买羞,并返回一個(gè)列表
需求:切割字符串"info:xiaozhang 33 shandong"
ret = re.split(r":|","info:xiaozhang 33 shandong")
print ret
python正則表達(dá)式貪婪和非貪婪模式
貪婪:總是嘗試匹配盡可能多的字符,Python里的數(shù)量詞默認(rèn)是貪婪的
非貪婪:總是嘗試著匹配盡可能少的字符雹食。
在"*","?","+","{m,n}"后面加上畜普?,是貪婪變成非貪婪群叶。
s="This is a number 234-235-22-423">>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)
r.group(1)
'4-235-22-423'>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)
r.group(1)
'234-235-22-423'
re.match(r"aa(\d+)","aa2343ddd").group(1)
'2343'>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1)
'2343'>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'