4-正则表达式

import re
a = re.match('\d+','123abc456') #match从头开始匹配1个数字
b = re.search('\d+', ) #search从所有位置匹配1个数字
c = re.findall('\d+','123abc456') #匹配所有数字,并生成list
d = re.findall('[^\d]','abc123def35gg*_adb') #匹配非数字
e = re.split('\d+','abc123def35g*g67_ad9b') #以数字为符合进行分割
print a.group() #匹配后用group函数返回结果
print b.group()
print c
print d
print e
f = re.sub('abc','www','abc123abc456',count=1)
#把所有第1abc替换为www,不加count参数为替换所有
匹配IP地址 
a = 'inet addr:10.0.4.44 Bcast:10.10.4.255 Mask:255.255.255.0'
ret = re.search('(\d+\.){3}(\d+)',a).group() #匹配{3}(数字.)+数字
匹配值并取值
name = 'Mingwei Yang'
ret = re.search('(\w+)\s(\w+)',name) #方法1,通过元祖下标获取
ret2 = re.search('(?P<name>\w+)\s(?P<last_name>\w+)',name)#方法2,通过别名方式获取

print ret.groups()[0] #输出Mingwei
print ret2.group('name') #同样输出Mingwei
计算器
import re
str = '1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998 +10*568/14))-(-4*3)/(16-3*2))'
x1 = re.search('\([^()]*\)',str).group() #找出(9-2*5/3+7/3*99/4*2998 +10*568/14 )
str2 = str.replace(x1,'100') #算出结果并替换,替换后str2= 1-2*((60-30+1*100)-(-4*3)/(16-3*2))
x2 = re.search('\([^()]*\)',str2).group() #找出 (60-30+1*100)
str3 = str2.replace(x2,'130') #替换后,str3= 1-2*(130 - (-4*3)/(16-3*2))
#'''依次替换出所有括号内的结果

先编译后匹配,再匹配(速度快)

import re
com = re.compile('\d+') #先编译
print com.search('123abc456').group()



字符:

  . 匹配除换行符以外的任意字符
  \w 匹配字母或数字或下划线或汉字
  \s 匹配任意的空白符
  \d 匹配数字
  \b 匹配单词的开始或结束
  ^ 匹配字符串的开始
  $ 匹配字符串的结束

次数:

  * 重复零次或更多次
  + 重复一次或更多次
  ? 重复零次或一次
  {n} 重复n次
  {n,} 重复n次或更多次
  {n,m} 重复n到m次


 



来自为知笔记(Wiz)


你可能感兴趣的:(4-正则表达式)