python基础语法—day14(笔记)

主要内容:

1.可迭代对象和迭代器

from collections.abc import Iterable

#
# class Demo(object):
#     pass
# d=Demo()
# print(isinstance(d,Iterable))  #False,判断这个实例对象是否为可迭代对象
# class Foo(object):
#     def __next__(self):
#         return '你好'

class Demo(object):
    def __init__(self,x):
        self.x=x
        self.count=0
    def __iter__(self):  #只要重写了__iter__方法,就是一个可迭代对象
        # f=Foo()
        # return f
        return self
    def __next__(self):
        self.count+=1
        if self.count < self.x:
            return '你好'
        else:
            raise StopIteration   #让迭代器停止
d=Demo(10)
print(isinstance(d,Iterable))   #True

#for …… in ……循环的本质就是调用可迭代对象的__iter__方法,获取这个方法的返回值
#这个返回值需要的是一个迭代器对象,然后再调用这个对象的__next__方法
for i in d:
    print(i)

2.导入模块

在这里插入图片描述
在这里插入图片描述

3.正则查找相关的方法

正则表达式:用来处理字符串,对字符串进行检索和替换
(1)match:查找字符串,返回的结果是一个re.Match对象
(2)search:查找字符串,返回的结果是一个re.Match对象
match和search:
1)共同点:只对字符串查询一次,返回值类型都是re.Match类型的对象
2)不同点:match是从头开始匹配,一旦匹配失败,就是返回None;search是对整个字符串查询

import re
m1=re.match(r'hello','helloworld')
print(m1)   #<_sre.SRE_Match object; span=(0, 5), match='hello'>
m1=re.search(r'hello','helloworld')
print(m1)   #<_sre.SRE_Match object; span=(0, 5), match='hello'>

m2=re.match(r'good','hello world,good morning')
print(m2)   #None
m2=re.search(r'good','hello world,good morning')
print(m2)   #<_sre.SRE_Match object; span=(12, 16), match='good'>

(3)finditer:找到所有的匹配数据并放到一个可迭代对象里面,返回的结果是一个可迭代对象,可迭代对象里的数据是匹配到的所有结果,是一个re.Match类型的对象

import re
from collections.abc import Iterable

m1=re.finditer(r'x','asfdxsgdhbxhihxas')
print(isinstance(m1,Iterable))   #True
print(m1)   #<callable_iterator object at 0x0000025A53086CC0>
for i in m1:
    print(i)
# <_sre.SRE_Match object; span=(4, 5), match='x'>
# <_sre.SRE_Match object; span=(10, 11), match='x'>
# <_sre.SRE_Match object; span=(14, 15), match='x'>

(4)findall:把查找到的所有字符串结果放到一个列表里

import re

m1=re.findall(r'x','asfdxsgdhbxhihxas')
print(m1)  #['x', 'x', 'x']
m2=re.findall(r'x\d+','asfdx12sgdhbx89hihx28as')
print(m2)  #['x12', 'x89', 'x28']

(5)fullmatch:完整匹配,字符串需要完全满足正则规则才会返回结果,否则返回的是None

import re

m1=re.fullmatch(r'hello','hello world')
print(m1)   #None
m2=re.fullmatch(r'hello world','hello world')
print(m2)   #<_sre.SRE_Match object; span=(0, 11), match='hello world'>
m3=re.fullmatch(r'h.*d','hjfhtesd')
print(m3)   #<_sre.SRE_Match object; span=(0, 8), match='hjfhtesd'>

4.re.Match类的介绍

import re

# 调用re.Match、re.search或者对re.finditer结果进行遍历,拿到的结果都是re.Match类型的对象
m = re.search(r'm.*a', 'asfdmdgasdfasd')
print(m.pos, m.endpos)  # 0 14  指定查找的范围
print(m.span())  # (4, 12)  匹配到的结果是字符串的开始和结束下标
print(m.group())  # mdgasdfa  获取匹配字符串的结果
# group可以传参,表示第n个分组
print(m.group(0))
'''
group方法表示正则表达式的分组
(1)在正则表达式里使用()表示一个分组
(2)如果没有分组,表示只有一组
(3)分组的下标从0开始
'''

# 这个正则表达式有四个分组
# group(0):(3.*)(4.*)(8.*1)
# group(1):(3.*)
# group(2):(4.*)
# group(3):(8.*1)
m1 = re.search(r'(3.*)(4.*)(8.*1)', 'asf3deat4gfvg8hfs1df')

print(m1.group(0))  # 3deat4gfvg8hfs1,m1.group()默认拿第0组
print(m1.group(1))  # 3deat
print(m1.group(2))  # 4gfvg
print(m1.group(3))  # 8hfs1

# ('3deat', '4gfvg', '8hfs1'),把分组的数据变成元组
print(m1.groups())

# groupdict 获取到分组组成的字典
print(m1.groupdict())  # {}
# 还可以个分组取个名字,格式:(?P<name>...)
m2 = re.search(r'(3.*)(?P<xxx>4.*)(8.*1)', 'asf3deat4gfvg8hfs1df')
print(m2.groupdict())  # {'xxx': '4gfvg'}
print(m2.groupdict('xxx'))  # {'xxx': '4gfvg'}
print(m2.group('xxx'))  # 4gfvg
print(m2.group(2))  # 4gfvg
print(m2.span(2))  # (8, 13)拿到第二组的下标

5.re.compile方法的使用

import re


#compile编译
#在re模块里可以使用re.方法调用函数,还可以使用re.compile得到一个对象

#可以直接调用re.search方法
m1=re.search(r'm.*a','qdqmwefgfdioyafrg')
print(m1.group())   #mwefgfdioya

r=re.compile(r'm.*a')
m1=r.search('qdqmwefgfdioyafrg')
print(m1.group())   #mwefgfdioya

6.正则修饰符的使用

import re

# 正则修饰符是对正则表达式进行修饰
#  . 表示除了换行以外的任意字符
# re.S  让.匹配换行
# re.I  忽略大小写
# re.M  让$能够匹配到换行
m = re.search(r'm.*a', 'adfsmsc\nftsfadfss')
print(m)  # None
m = re.search(r'm.*a', 'adfsmsc\nftsfadfss', re.S)
print(m.group())
# msc
# ftsfa
m = re.search(r'x', 'sdfXsd', re.I)
print(m.group())  # X

# \w:表示数字字母和_    +:出现一次以上   $:以指定的内容结尾
m = re.findall(r'\w+$', 'i am boy\nyou am girl\nhe is man', re.M)
print(m)  # ['boy', 'girl', 'man']

7.正则匹配规则

import re

'''
(1)数字和字母都表示它本身
(2)很多字母前面添加\会有特殊含义(重点)
(3)绝大多数标点符号都有特殊含义(重点)
(4)如果想要使用标点符号,需要加\
'''
#w表示字母本身
m=re.search(r'w','hello world')
print(m.group())
#4表示数字本身
m=re.findall(r'4','3434652')

m1=re.search(r'\w','hello world')  #\有特殊含义,不再是字母w

# m=re.search('+','1+2')  #不能直接使用,+有特殊含义
m2=re.search('\+','1+2')
print(m2)   #<_sre.SRE_Match object; span=(1, 2), match='+'>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值