import re
不要起一个.py的名字, 这个名字和模块名不能同名
findall
匹配所有 每一项都是列表的一个元素
ret = re.findall('\d+','admin1232kdjfdkfj2323') #正则表达式, 带匹配的字符串,flag
print(ret) #['1232', '2323']
search
search 只匹配从左到右第一个 得到的不是直接结果, 而是一个变量, 通过变量.group获取结果
如果没有被匹配过, 返回None 使用group报错
ret = re.search('\d+','admin1232kdjfdkfj2323')
print(ret) #<re.Match object; span=(5, 9), match='1232'> 内存地址 正则匹配的结果
print(ret.group()) #1232 通过ret.group获取真正的结果
match
match 从头开始匹配, 相当于search中的正则表达式加上一个^
ret = re.match('\d+','admin1232kdjfdkfj2323')
print(ret) #None
ret = re.match('\d+','123adminkdjfdkfj2323')
print(ret) #<re.Match object; span=(0, 3), match='123'>
字符串处理的扩展 替换切割
split 切割
s = 'qiaoning|wangtao|lixianglong'
print(s.split('|')) #['qiaoning', 'wangtao', 'lixianglong']
s = 'qiaoning234wangtao4567lixianglong8983948394'
ret = re.split('\d+',s)
print(ret) #['qiaoning', 'wangtao', 'lixianglong', '']
sub 谁 旧的 新的 替换次数
ret = re.sub('\d+','H','qiaoning234wangtao4567lixianglong898394')
print(ret) #qiaoningHwangtaoHlixianglongH
ret = re.sub('\d+','H','qiaoning234wangtao4567lixianglong898394',1)
# print(ret) #qiaoningHwangtao4567lixianglong898394
subn 返回一个元组, 第二个元素是替换的次数
ret = re.subn('\d+','H','qiaoning234wangtao4567lixianglong898394')
print(ret) #('qiaoningHwangtaoHlixianglongH', 3)
compile
节省使用正则表达式解决问题的时间
把正则表达式编译成字节码
在多次使用的过程中,不会多次编译
ret = re.compile('\d+') #编译
print(ret) #re.compile('\\d+')
res = ret.findall('qiaoning234wangtao4567lixianglong898394')
print(res) #['234', '4567', '898394']
ree = ret.search('qiaoning234wangtao4567lixianglong898394')
print(ree) #<re.Match object; span=(8, 11), match='234'>
print(ree.group()) #234
finditer
finditer节省使用正则表达式解决问题的空间
ret = re.('\d+','qiaoning234wangtao4567lixianglong898394')
print(ret) #<callable_iterator object at 0x0000018F53E824E0>
for el in ret:
print(el.group())
#结果
234
4567
898394
网友评论