re模块下的函数
compile(pattern):创建模式对象
import repat=re.compile('A')m=pat.search('CBA') #等价于 re.search('A','CBA')print m<_sre.SRE_Match object at 0x9d690c8> #匹配到了,返回MatchObject(True)m=pat.search('CBD')print mNone #没有匹配到,返回None(False)
search(pattern,string):在字符串中寻找模式
m = re.search('asd','ASDasd')print m<_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)m = re.search('asd','ASDASD')print mNone #没有匹配到,返回None(False)
match(pattern,string):在字符串开始处匹配模式
m = re.search('asd','ASDasd')print m<_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)m = re.search('asd','ASDASD')print mNone #没有匹配到,返回None(False)
等价于
pat=re.compile('a')print pat.match('Aasd')Noneprintpat.match('aASD')<_sre.SRE_Match object at 0xb72cd6e8>
上面的函数返回都可以在if条件语句中进行判断:
if pat.search('asd'):... print 'OK'... OK #找到返回if re.search('a','ASD'):... print "OK"... #没有找到
split(pattern,string):根据模式分割字符串,返回列表
re.split(',','a,s,d,asd')['a', 's', 'd', 'asd'] #返回列表 pat = re.compile(',')pat.split('a,s,d,asd')['a', 's', 'd', 'asd'] #返回列表 re.split('[, ]+','a , s ,d ,,,,,asd') #正则匹配:[, ]+,后面说明['a', 's', 'd', 'asd'] re.split('[, ]+','a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次数['a', 's', 'd ,,,,,asd'] pat = re.compile('[, ]+') #正则匹配:[, ]+,后面说明pat.split('a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次数['a', 's', 'd ,,,,,asd']
findall(pattern,string):列表形式返回匹配项
re.findall('a','ASDaDFGAa') ['a', 'a'] #列表形式返回匹配到的字符串pat = re.compile('a')pat.findall('ASDaDFGAa')['a', 'a'] #列表形式返回匹配到的字符串pat = re.compile('[A-Z]+') #正则匹配:'[A-Z]+' 后面有说明pat.findall('ASDcDFGAa')['ASD', 'DFGA'] #找到匹配到的字符串pat = re.compile('[A-Z]')pat.findall('ASDcDFGAa') #正则匹配:'[A-Z]+' 后面有说明['A', 'S', 'D', 'D', 'F', 'G', 'A'] #找到匹配到的字符串pat = re.compile('[A-Za-z]') #正则匹配:'[A-Za-z]+' 匹配所有单词,后面有说明pat.findall('ASDcDFGAa')['A', 'S', 'D', 'c', 'D', 'F', 'G', 'A', 'a']
sub(pat,repl,string) :用repl替换 pat匹配项
(留的是中间的,因为中间在中心)
re.sub('a','A','abcasd') #找到a用A替换,后面见和group的配合使用'AbcAsd'pat = re.compile('a')pat.sub('A','abcasd')'AbcAsd' pat=re.compile(r'www/.(.*)/..{3}') #正则表达式 #在Python的string前面加上‘r', 是为了告诉编译器这个string是个raw string,不要转译反斜杠 '/' 。 #例如,/n 在raw string中,是两个字符,/和n, 而不会转译为换行符。 #由于正则表达式和 / 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。 #与大多数编程语言相同,正则表达式里使用"/"作为转义字符,这就可能造成反斜杠困扰。 #假如你需要匹配文本中的字符"/",那么使用编程语言表示的正则表达式里将需要4个反斜杠"////": #前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。 #Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"//"表示。 #同样,匹配一个数字的"//d"可以写成r"/d"。 #有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。 #不是说 加了r /就没有转译功能,好乱,就直接记住1句话: #当一个字符串使用了正则表达式后,最好在前面加上'r',这样你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观pat.match('www.dxy.com').group(1)'dxy're.sub(r'www/.(.*)/..{3}',r'/1','hello,www.dxy.com')pat.sub(r'/1','hello,www.dxy.com') 'hello,dxy'# r'1' 是第一组的意思#通过正则匹配找到符合规则的"www.dxy.com" ,取得 组1字符串 去替换 整个匹配。 pat=re.compile(r'(/w+) (/w+)') #正则表达式s='hello world ! hello hz !'pat.findall('hello world ! hello hz !')[('hello', 'world'), ('hello', 'hz')]pat.sub(r'/2 /1',s) #通过正则得到组1(hello),组2(world),再通过sub去替换。即组1替换组2,组2替换组1,调换位置。 'world hello!hz hello!'
新闻热点
疑难解答