一垦梆、正則表達(dá)式符號(hào)
正則表達(dá)式:
字符串查找淹朋、匹配施逾、切割(python對(duì)正則表達(dá)式的支持:提供了re模塊(python內(nèi)置模塊),包含字符串匹配、查找呈野、切割等相關(guān)方法)
fullmatch(正則表達(dá)式, 字符串):用正則表達(dá)式來和字符串進(jìn)行匹配低矮,看是否能夠匹配成功
注意:正則表達(dá)式的字符串,前面一般要加r來阻止轉(zhuǎn)義被冒。
因?yàn)檎齽t表達(dá)式的符號(hào)中有很多帶''的符號(hào)商佛,其功能不是轉(zhuǎn)義,而是表示特殊的意義
import re
#一系列的符號(hào)來組成的姆打,有自己的語法規(guī)范良姆,符號(hào)正則規(guī)范的字符串
#re.fullmatch(),完全匹配,從第一個(gè)字符開始幔戏,一直匹配
#2.\w 數(shù)字字母下劃線
#3.\s匹配一個(gè)空白字符(空格玛追、換行、制表符)
re_str='a\sb'
print(re.fullmatch(re_str,'a\nb'))
#\d匹配一個(gè)數(shù)字字符(1-9)
re_str='\d\d\d'
print(re.fullmatch(re_str,'123'))
#\b邊界檢測(cè)(字符串開頭和結(jié)束,單詞邊界)
re_str='how,are,you'
print(re.match(r'\b...\b.a',re_str))
#^(檢測(cè)以^The開頭的字符串)
re_str='Theb kjjlj'
print(re.findall(r'The',re_str))
#$檢測(cè)字符串以什么結(jié)束
re_str='abc$'
print(re.findall(re_str,'adddfggggg abc'))
# \W 匹配非數(shù)字字母下劃線
re_str=r'\W\w'
print(re.fullmatch(re_str,'%k'))
#\S 匹配非空白字符
re_str=r'\S\d'
print(re.fullmatch(re_str,'r7'))
# \D 匹配非數(shù)字
re_str='\D\w'
print(re.fullmatch(re_str,'f3'))
#\B檢測(cè)非邊界
re_str='\Babc'
print(re.findall(re_str,'dabccfff'))
二闲延、正則表達(dá)式中的符號(hào)組合
import re
"""1.匹配[]中一個(gè)字符痊剖,前三位是abc,第四位是字符1或者字符a"""
re_str=r'abd[1a]'
print(re.fullmatch(re_str,'abda'))
re_str=r'[\d]abc'
print(re.fullmatch(re_str,'1abc'))
"""2.[^]匹配不在中括號(hào)中的任意字符"""
re_str='ddd[^\da]'
print(re.fullmatch(re_str,'dddj'))
# [0-9]:匹配0,1,2,3.垒玲。陆馁。。9中任一字符
# [1-8]匹配1,2合愈,3,4.叮贩。击狮。8
# [a-z]匹配任意一個(gè)小寫字母
# [a-zA-Z]:匹配的是任意字母
print(re.fullmatch(r'[a-z]','f'))
"""3.*匹配0次或者多次數(shù)字字符,必須全是數(shù)字益老,不可摻雜其他"""
re_str=r'\d*abc'
print(re.fullmatch(re_str,'020498897abc'))
print(re.fullmatch(r'\d*','33'))
# re_str=r'\d\d*'
# re_str=r'[0-9][0-9]*'
re_str=r'[_a-zA-Z]\w*'
print(re.fullmatch(re_str,'ad_c'))
#5.?出現(xiàn)0次或者1次
re_str=r'[a-z]?123'
re_str=r'[+]?[1-9][0-9]*'
print(re.fullmatch(re_str,'4400'))
# {N}匹配N次
# {N,}
re_str=r'\d{3,}.*'
# {M,N}
'[\da-zA-Z]*{5,11}'
#分支|,或者的意思
re_str=r'\d{3}|[a-z]{3}'
print(re.fullmatch(re_str,'123'))
# ()匹配的時(shí)候是分組捺萌,讓括號(hào)里面的正則條件變成整體
re_str=r'(abd){3}'
re_str=r'abc{3}'
"""=======以下了解======="""
# 10.*档冬?重復(fù)任意次,盡量少重復(fù)
三桃纯、特殊轉(zhuǎn)義字符
1.特殊符號(hào)轉(zhuǎn)義
正則中:.\ [] {} () * + ? ^ $ | 這些字符有特殊意義酷誓,所有在正則表達(dá)式中
如果想單純表達(dá)這些字符,需要在前面加''
在括號(hào)中 - 號(hào)可能是特殊的符號(hào)
注意:
1 - [] ^ \在中括號(hào)中可能是特殊符號(hào)要加
2 . {} () * + ? $在中括號(hào)中可以不用加,來表示字符
import re
re_str=r'\d+\.\d+'
print(re.fullmatch(re_str,'12.13'))
re_str=r'\d[2\-5]\d'
print(re.fullmatch(re_str,'1-3'))
re_str=r'([1-9][a-z]{2})n\1'
print(re.fullmatch(re_str,'8hhn8hh'))
re_str=r'([1-9][a-z]{2})n(\d)\1\2'
print(re.fullmatch(re_str,'9hjn89hj8'))
四态坦、complie
1.complie(正則字符串)呛牲,將正則表達(dá)式字符串轉(zhuǎn)成正則表達(dá)式對(duì)象
# 將轉(zhuǎn)換成正則表達(dá)式對(duì)象后,可以通過對(duì)象調(diào)用相關(guān)方法
re_obct=re.compile(r'\w{6,12}')
print(re_obct.fullmatch('ahkdjk'))
print(re.fullmatch(r'\w{6,12}','ahkdjk'))
# 2.fullmatch(正則表達(dá)式驮配,字符串)完全匹配,從字符串開頭匹配到結(jié)尾
# 返回值是匹配對(duì)象
match=re.fullmatch('\w{3}','h3s')
print(match)
# a.獲取匹配到的結(jié)果
print(match.group())
# b.獲取匹配到的范圍
print(match.span())
# c.獲取匹配到的開始和結(jié)束下標(biāo)
print(match.start(),match.end())
# d.獲取匹配到的字符串(原字符串)
print(match.string)
# 應(yīng)用:判斷一個(gè)字符串是否是某種字符串
作業(yè):
1 獲取字符串中:
a.所有的正整數(shù)
b.所有的負(fù)整數(shù)
c.所有的浮點(diǎn)數(shù)
d.所有的非負(fù)浮點(diǎn)數(shù)
import re
re_str=r'[+]?\d+'
print(re.findall(re_str,'1aaa2bbb3ccc4'))
re_str=r'[-]?\d+'
print(re.findall(re_str,'-1aaa-2bbb-3ccc-4'))
re_str=r'[-]?\d+\.\d+'
print(re.findall(re_str,'-1.1aaa-2.2bbb3ccc4'))
re_str=r'\d+\.\d+'
print(re.findall(re_str,'1.1aaa2.2bbb3ccc4'))
結(jié)果顯示:
['1', '2', '3', '4']
['-1', '-2', '-3', '-4']
['-1.1', '-2.2']
['1.1', '2.2']
不定項(xiàng)選擇題
- 能夠完全匹配字符串“(010)-62661617”和字符串“01062661617”的正則表達(dá)式包括(a b )
A. “(?\d{3})?-?\d{8}”
B. “[0-9()-]+”
C. “[0-9(-)]\d”
D. “[(]?\d[)-]\d*”
- 能夠完全匹配字符串“c:\rapidminer\lib\plugs”的正則表達(dá)式包括(bc )
A. “c:\rapidminer\lib\plugs”
B. “c:\rapidminer\lib\plugs”
C. “(?i)C:\RapidMiner\Lib\Plugs” ?i:將后面的內(nèi)容的大寫變成小寫
D. “(?s)C:\RapidMiner\Lib\Plugs” ?s:?jiǎn)涡衅ヅ?/li> - 能夠完全匹配字符串“back”和“back-end”的正則表達(dá)式包括( b d)
短路操作:前面的為真了着茸,就不會(huì)再執(zhí)行后邊的操作
A. “\w{4}-\w{3}|\w{4}” B. “\w{4}|\w{4}-\w{3}”
C. “\S+-\S+|\S+” D. “\w\b-\b\w|\w*” - 能夠完全匹配字符串“go go”和“kitty kitty”壮锻,但不能完全匹配“go kitty”的正則表達(dá)式包括(ab )
:\1就是重復(fù)前面第一個(gè)()/組合里面的內(nèi)容
:\2就是重復(fù)前面第二個(gè)()/組合里面的內(nèi)容
A. “\b(\w+)\b\s+\1\b”
B. “\w{2,5}\s*\1”
C. “(\S+) \s+\1”
D. “(\S{2,5})\s{1,}\1” - 能夠在字符串中匹配“aab”,而不能匹配“aaab”和“aaaab”的正則表達(dá)式包括( bc )
A. “a*?b”
B. “a{,2}b”
C. “aa??b”
D. “aaa??b”
三.觀察下面雙引號(hào)內(nèi)的文本”中文名 貝拉克·侯賽因·奧巴馬 外文名 Barack Hussein Obama II 別 名 歐巴馬 國(guó) 籍美國(guó) 民 族 德裔族 出生地 美國(guó)夏威夷州檀香山 出生日期 1961年8月4日 職 業(yè)政治家涮阔、律師猜绣、總統(tǒng) 畢業(yè)院校哥倫比亞大學(xué),哈佛大學(xué) 信 仰新教 主要成就 1996年伊利諾伊州參議員 主要成就美國(guó)第56屆敬特、57屆總統(tǒng) 2009年諾貝爾和平獎(jiǎng)獲得者 時(shí)代周刊年度風(fēng)云人物2008掰邢、2011 任期內(nèi)清除本·拉登 代表作品 《我相信變革》《我父親的夢(mèng)想》《無畏的希望》 所屬政黨美國(guó)民主黨 血 型 AB型 學(xué) 院西方學(xué)院 妻 子米歇爾·拉沃恩·奧巴馬 性 別 男”
re_str1=r'中文名\s+(\S+)\s+'
result1=re.findall(re_str1,str1)
print(result1)
result1=re.sub(r'[^\d]','$1',str(result1))
print(result1)
re_str2=r'[a-zA-Z]* [a-zA-Z]* [a-zA-Z]* II'
result2=re.findall(re_str2,str1)
print(result2)
result2=re.sub(r'[a-zA-Z]','$1',str(result2))
print(result2)
re_str3=r'\d*年\d月\d日'
result3=re.findall(re_str3,str1)
result3=re.sub(r'\d*','$1',str(result3))
print(result3)