python基本正则表达式

#!/usr/bin/python
#coding=utf-8


import re

#python正则表达式
'''
re.match(pattern,string,flags=0):尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()返回none
pattern 匹配的正则表达式
string	要匹配的字符串
flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
可以用group(num)或gruops()函数来获取匹配的表达式

.表示匹配任意字符,处理换行符,当re.DOTALL标记被指定时,则可以匹配包含换行符的任意字符(re是正则表达式的英文缩写)
*表示重复前一个表达式0次或多次(贪婪模式:在匹配成功的情况下,匹配尽可能长的字符串,例如:a*,如果字符串aaaa,则a*既可以匹配a,aa,aaa,aaaa都是匹配成功,按照贪婪模式则匹配aaaa)
(re)用()表示这是一个组,括号里面的表达式是一个组,1表示第一个组,2表示第二组
?表示重复前一个表达式0次或1次 *? 重复任意次,但尽可能少重复, 例如:a*,如果字符从aaaa,则a*既可以匹配a,aa,aaa,aaaa,按照懒惰模式则匹配a)
(?P) 特殊构造   分组,除了原有的编号(编号guoup(num))外在指定一个额外的别名 
\d 匹配任意数字
[] 用来表示一组字符串,匹配中括号中的任意一个字符
其他很多元字符可以自己查询

'''
print (re.match('www','www.baibai.com').span())	#在起始位置匹配成功返回匹配开始和结束位置
print (re.match('baibai','www.baibai.com'))	#不在起始位置匹配返回none


lines="Don't you have a B number in your heart"
matchobj = re.match( r'(.*) B (.*?) .*', lines, re.M|re.I) #r 表示字符串为非转义的原始字符串,让编译器忽略反斜杠
if matchobj:
	print "match.group():",  matchobj.group()
	print "match.group(1):", matchobj.group(1)
	print "match.group(2):", matchobj.group(2)
else:
	print "no match"


#re.search(pattern,string,flags=0):尝试从整个字符串匹配一个模式,知道匹配成功的话,如果字符串没有匹配的返回none
print (re.search('www','www.baibai.com').span())
print (re.search('baibai','www.baibai.com').span())	

#search和match的区别在于match从起始位置匹配,如果不是起始位置匹配成功就返回none,search是整个字符串匹配,直到找到一个匹配


#检索和替换
#re.sub(pattern,rep1,string,count=0,flags)
#rep1:替换的字符串,也可以为一个函数
#count:模式匹配后替换的最大次数,默认0表示替换所有匹配

phone="2015-1546-4565 # 这是一个号码"
num=re.sub(r'#.*$', "", phone)	#替换注释
print num

def add(matched):
	value=int(matched.group('value'))
	return str(value*2)
s='a12b3cds567'
print (re.sub('(?P\d+)',add,s))

你可能感兴趣的:(python基本正则表达式)