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() #根据模式分割字符串,返回列表 a=re.split(", ","a, b, d")
#找到a用A替换,re.subn返回替换了多少次,可以规定替换次数 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()) #取不到分组 返回一个空元组
#(?=)向要匹配的字符串后匹配,匹配后面是数字的字母或者数字 res = re.compile(r"\w(?=\d)").findall("abc1 def1 xyz1") print(res) #(?!)和(?=)对字符串后匹配,匹配字符串后不是数字的字母或者数字 res = re.compile(r"\w(?!\d)").findall("abc1 def1 xyz1") print(res) #(?<=),(?<!) 向前匹配 = 表示匹配字符串前面是什么的内容,!表示字符串前面不是什么的内容 >>> pat=re.compile(r'(?<=\d)[A-Za-z]+') #匹配前面是数字的字母 >>> pat.findall('abc21,def31,xyz41') [] >>> pat.findall('1abc21,2def31,3xyz41') ['abc', 'def', 'xyz']
=========================================== >>> pat=re.compile(r'(?<!\d)[A-Za-z]+') #匹配前面不是数字的字母 >>> pat.findall('abc21,def31,xyz41') ['abc', 'def', 'xyz'] >>> pat.findall('zhoujy20130628hangzhou123,12,binjiang310') ['zhoujy', 'angzhou', 'binjiang']
|