mport re
#match 從要被匹配的字符串開頭開始匹配, 如果沒有匹配到返回None a = re.match("c","abc") #search 在被匹配的字符串中尋找匹配,如果使用^就等價于match a = re.search("c","abc").group() a = re.search("^c","abc") #返回一個正則表達式對象 pattern = re.compile("A").search("ABC").group() #print("patt:",pattern) #a=pattern.search("ABD").group() #根據(jù)模式分割字符串,返回列表 a=re.split(", ","a, b, d")
#找到a用A替換,re.subn返回替換了多少次,可以規(guī)定替換次數(shù) a = re.sub("a","A","all",) #findall全字符串匹配,返回一個列表 a = re.findall("a","aafdsfaafafasfsf") # # all =re.finditer("a","adaddadsddsdaddsdd") # for a in all: # print(a.group()) pat=re.compile(r'(?P<K>a)\w(c)') #分2組:命名分組+匿名分組 print(pat.search('abcdef').groups("K")) #取所有分組,元組形式返回
string1 = "<span>hello world</span>hello world" rs = re.match("(?P<span_contexts><span>(.*)</span>)",string1) print(rs.group()) #(正則表達式)----》為匿名分組, (?P<name>------》正則表達式) 有名分組。***P為大寫, # (?P=name)---->引用命名分組匹配到的值,P為大寫 ,(?P=N)引用組名為N的分組匹配到的值“hello world” #引用分組匹配到的值用\2 --->引用分組2(?P(N)匹配的值“hello world”) rs = re.compile(r"(?P<K><span>(?P<N>.*)</span>)\2").search(string1) print(rs.group()) #括號里面有(?:) 表示不是一個分組 <span>(?:.*)</span>中(.*)不是一個無名分組 rs = re.compile(r"<span>(?:.*)</span>").search(string1) print(rs.groups()) #取不到分組 返回一個空元組
#(?=)向要匹配的字符串后匹配,匹配后面是數(shù)字的字母或者數(shù)字 res = re.compile(r"\w(?=\d)").findall("abc1 def1 xyz1") print(res) #(?!)和(?=)對字符串后匹配,匹配字符串后不是數(shù)字的字母或者數(shù)字 res = re.compile(r"\w(?!\d)").findall("abc1 def1 xyz1") print(res) #(?<=),(?<!) 向前匹配 = 表示匹配字符串前面是什么的內(nèi)容,!表示字符串前面不是什么的內(nèi)容 >>> pat=re.compile(r'(?<=\d)[A-Za-z]+') #匹配前面是數(shù)字的字母 >>> pat.findall('abc21,def31,xyz41') [] >>> pat.findall('1abc21,2def31,3xyz41') ['abc', 'def', 'xyz']
=========================================== >>> pat=re.compile(r'(?<!\d)[A-Za-z]+') #匹配前面不是數(shù)字的字母 >>> pat.findall('abc21,def31,xyz41') ['abc', 'def', 'xyz'] >>> pat.findall('zhoujy20130628hangzhou123,12,binjiang310') ['zhoujy', 'angzhou', 'binjiang']
|