正則表達式——字符串匹配


正則表達式

#導入模塊
import re

text = r"rubyrjavamatlabpythonhtmlc++"
p = r"python"
pat = re.compile(p)
mat = re.search(pat, text)
print(mat.group(0))

#說明,符號“.”代表匹配包括本身在內的任何一個字符,“+”表示將前面的一個字符或者表達式重復一次或者多次,至少有一次
#下例中如果p1改為r"<test>.<test>",那么得到的匹配結果為空
#findall返回所有符合要求的列表
text1 = r"<test>python<test>"
p1 = r"<test>.+<test>"
pat1 = re.compile(p1)
print('1:', pat1.findall(text1))

#如果想要匹配“.”本身,那么需要借助轉義符“\”
#下例中其實不加“\”也能得到正確的結果,因為“.”可以匹配任意一個字符,包括它本身
text2 = r"http://www.baidu.com/"
p2 = r"www\.baidu\.com"
pat2 = re.compile(p2)
print('2:', pat2.findall(text2))

#符號“+”將前面一個字符或者子表達式重復一遍或者多遍,符號“*”匹配前面0次或者多次
#比較以下結果,前一個不能夠完成匹配,后一個可以匹配到python
text3 = r"rubypythonpythonmatlab"
p3 = r"pythonn+"
pat3 = re.compile(p3)
print('3:', pat3.findall(text3))

text4 = r"rubypythonmatlab"
p4 = r"pythonn*"
pat4 = re.compile(p4)
print('4:', pat4.findall(text4))

#[]表示匹配里面的任意一個字符
text5 = r"aython bython cython python"
p5 = r"[pth]ython"
pat5 = re.compile(p5)
print('5:', pat5.findall(text5))

#[^]表示除了里面的字符以外都匹配
text6 = r"aython bython cython python"
p6 = r"[^p]ython"
pat6 = re.compile(p6)
print('6:', pat6.findall(text6))

#貪婪的和懶惰的“+”
#原意想得到'http://www.'的匹配結果,但是得到了'http://www.baidu.',這表明了+的貪婪,盡可能多的匹配,通過加上一個?,變成了懶惰的
text7 = r"http://www.baidu.com/"
p7 = r"http.+\."
pat7 = re.compile(p7)
print("7:", pat7.findall(text7))

p8 = r"http.+?\."
pat8 = re.compile(p8)
print("8:", pat8.findall(text7))

#精准控制匹配次數{a,b},匹配次數大於等於a,小於等於b
text9 = r"python pyython pyyython pyyyython pyyyyython"
p9 = r"py{1,2}thon"
pat9 = re.compile(p9)
print("9:", pat9.findall(text9))

p10 = r"py{4,5}thon"
pat10 = re.compile(p10)
print("10:", pat10.findall(text9))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM