正则表达式:参考链接:https://www.cnblogs.com/zjltt/p/6955965.html
模块:re
用途:用于模糊匹配
一.元字符
import re
print(re.findall('a..x','scdcdabnxmn'))
#输出:
['abnx']
import re
print(re.findall('^a..x','ascxdcdabnxmn'))
#输出
['ascx']
import re
print(re.findall('a..x$','ascxdcdabnxamnx'))
['amnx']
import re
print(re.findall('m*','ascxdcmmmmmdabnxamnx'))
#输出
['', '', '', '', '', '', 'mmmmm', '', '', '', '', '', '', 'm', '', '', '']
import re
print(re.findall('m+','ascxdcmmmmmdabnxamnx'))
#输出
['mmmmm', 'm']
import re
print(re.findall('xdc?','ascxdcccmmmmmdabnxamnx'))
#输出
['xdc']
import re
print(re.findall('xdm{2,3}','ascxdmmmmmdabnxxdmmnx'))
#输出
'xdmmm', 'xdmm']
import re
print(re.findall('x[yz]','hiuhwfxyndvkfjxz'))
#输出
['xy', 'xz']
import re
s='abekwjbnkcdndnv'
print(re.findall('kw|c',s))
#输出:
['kw', 'c']
import re
print(re.findall('x(dm)','ascxdmxdmxdmmmdabnxxdmmnx'))
#输出:
['dm', 'dm', 'dm', 'dm']
f=re.findall('www\.(baidu|163).com','www.baidu.com')
print(f)
#输出
['baidu']
import re
s='alex23xiaoming35xiaohong56'
print(re.search('(?P[a-z]+)(?P\d+)',s).groupdict('name'))
#输出
{'name': 'alex', 'age': '23'}
re.findall(pattern, string) pattern是正则表达式,string 是需要匹配的字符串
返回所有符合条件的, 返回列表返回所有符合条件的, 返回列表
obj=re.search(pattern, string) 找到一个即停止寻找,返回一个对象,通过三种方法调用:
obj.group() # 获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来,有参取匹配到的第几个如2
obj.groups() # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果
obj.groupdict() # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分定义了key的组结果 #用于有名分组
#实例:
import re
obj=re.search('a(..)x','scdcdabnxmn')
print(type(obj))
print(obj)
print(obj.group())
print(obj.groups())
print(obj.groupdict())
#输出
abnx
('bn',)
{}
import re
s='alexm23xiaoming35mxiaohongm56'
print(re.split('\d\w',s))
#输出
['alexm', 'xiaoming', 'mxiaohongm', '']
import re
s='abchjh9vjhfe8kjqv3bj'
print(re.sub('\d+','A',s))
#输出:
abchjhAvjhfeAkjqvAbj
import re
s='abchjh933737vjhfe8kjqv3bj'
com=re.compile('\d+')
#两种使用方法
print(com.findall(s))
print(re.findall(com,s))
#输出
['933737', '8', '3']
['933737', '8', '3']
import re
s='abchjh933737vjhfe8kjqv3bj'
it=re.finditer('\d+',s)
print(type(it))
print(type(next(it)))
print(next(it).group())
#输出:
8
f=re.findall('www\.(baidu|163).com','www.baidu.com')
print(f)
#输出
['baidu']
import re
f=re.findall('www\.(?:baidu|163).com','www.baidu.com')
print(f)
#输出
['www.baidu.com']
import re
a = '''asdfsafhellopass:
234455
worldafdsf
'''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c
#输出:
b is []
c is ['pass:\n\t234455\n\t']
#辨析:优先级/去优先级/贪婪匹配/非贪婪匹配
一些例子感受区别:
import re
print(re.findall('m(.*?)','ascxdcmmmmmdabnxamnx')) #优先匹配分组里的内容
['', '', '', '', '', '']
print(re.findall('m.+?','ascxdcmmmmmdabnxamnx')) #
['mm', 'mm', 'md', 'mn']
print(re.findall('m*?','ascxdcmmmmmdabnxamnx'))
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
print(re.findall('m(?:.*?)','ascxdcmmmmmdabnxamnx')) #去优先级
['m', 'm', 'm', 'm', 'm', 'm']
print(re.findall('m.*?','ascxdcmmmmmdabnxamnx'))
['m', 'm', 'm', 'm', 'm', 'm']
import re
print(re.findall('m(.*?)x','ascxdcmmmmmdabnxamnx')) #优先匹配分组里的内容,尽可能少的匹配
['mmmmdabn', 'n']
print(re.findall('m(.*)x','ascxdcmmmmmdabnxamnx')) #优先匹配分组里的内容,尽可能多的匹配
['mmmmdabnxamn']