DAY5-re模块

  • findall 返回列表 找所有的匹配项

  • search 匹配就返回一个变量,通过group取匹配到的第一个值,不匹配就返回None,group会报错

  • match 相当于search的正则表达式中加了一个'^'

  • spilt 返回列表,按照正则规则切割,默认匹配到的内容会被切掉

  • sub/subn 替换,按照正则规则去寻找要被替换掉的内容,subn返回元组,第二个值是替换的次数

  • compile 编译一个正则表达式,用这个结果去search match findall finditer 能够节省时间

  • finditer 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存

  1. findall 匹配所有,匹配到的元素放入列表中
re_findall = re.findall('\d+', '我今年18岁明年我就19岁了')
print(re_findall)

结果:
['18', '19']
  1. search 只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法来获取结果.如果没有匹配到,会返回None,使用group会报错.
ret = re.search('\d+','周伦今年40岁了,结婚差不多20年了')
print(ret)  # 内存地址,这是一个正则匹配的结果
print(ret.group()) # 通过ret.group()获取真正的结果

结果:
<_sre.SRE_Match object; span=(4, 6), match='40'>
40
ret = re.search('\d+','我是一个程序员 666')
if ret :   # 内存地址,这是一个正则匹配的结果
    print(ret.group()) # 通过ret.group()获取真正的结果

结果:
666
  1. match 从头开始匹配,匹配到符合的就马上返回
ret = re.match('\d','928')
print(ret.group())
结果:
9
  1. split 返回列表,按照正则规则切割。
s = 'will|wilson|william'
print(s.split('|'))
s = 'alex83taibai40egon25'
print(re.split('\d+',s))
结果:
['will', 'wilson', 'william']
['alex', 'taibai', 'egon', '']
  1. sub/subn 替换
sub = re.sub('不', '就', '我不是一个程序员,不会敲代码')
print(sub)
sub = re.sub('不', '就', '我不是一个程序员,不会敲代码',1)
print(sub)
# subn 返回一个元组,第二个元素是替换的次数
subn = re.subn('不', '就', '我不是一个程序员,不会敲代码')
print(subn)

结果:
我就是一个程序员,就会敲代码
我就是一个程序员,不会敲代码
('我就是一个程序员,就会敲代码', 2)
  1. compile 预编译
ret = re.compile('\d+') # 完成编译
findall = ret.findall("alex83taibai40egon25")
print(findall)
search = ret.search("alex83taibai40egon25")
print(search)
print(search.group())
结果:
['83', '40', '25']
<_sre.SRE_Match object; span=(4, 6), match='83'>
83
  1. finditer 节省你使用正则表达式解决问题的内存
ret = re.finditer("\d+","alex83taibai40egon25")
for i in ret:
    print(i.group())

结果:
83
40
25
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容