Python之re模块

2021-09-06  本文已影响0人  Joening

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
上一篇 下一篇

猜你喜欢

热点阅读