从Python基础知识到入门,到进阶的全部文章会按照学习顺序陆续发表。如果发现有看不懂的地方,或发现有没见过的概念,请按照时间顺序,往前查找。
在讲正则表达式之前再补充面向对象中2个要注意的地方。
魔术方法:
魔术方法可以让自定义类比较像自带的内置类。
class Person:
....def __getattr__(self,name): #只要获取属性的时候就触发
....print(name)
def __getattribute__(self,name):#优先执行高于__getattr__
....print('wertyuio')
def __setattr__(self,name,value):#添加修改成员属性的时候会触发
....print(name ,value)
def __dir__(self): #dir(obj)执行dir 自动触发
....return [1,3,4.5]
def __call__(self,name):#把实例当做函数调用的时候会触发
....print(name,'Dangzuo函数')
多态:
实现多态有三个方面需要注意:
1.要有继承关系
2.子类要对父类有方法上的重写
3.父类数据的引用指向子类的对象。
正则表达式:
正则表达式是一种可以查询、匹配、替换内容的规则的式子,通常不要试图去读懂别人的表达式,因为需求不同产生的正则表达式就会发生变化。
使用场景:
匹配手机号、邮箱、url等。
爬虫内容的匹配。
nginx服务器也有正则表达式的应用。
使用原则:
能用字符串函数解决的就不用正则表达式,因为正则效率上要较之低。
基本使用:
模块内置函数:
re.compile()
将一个字符串编译为字节代码
p =re.match(pattern,string,flags = 0)
pattern:正则表达式
string:匹配的字符串
flags: 标志用于控制整个正则表达式
返回值:是None的时候代表没有匹配到,成功返回对象
功能:从内容的起始位置开始匹配
p.group() #匹配到的内容
p.span() # 匹配到的下标位置,是元组格式
p = re.search(pattern,string,flags = 0)
功能:扫描查找整个字符串,返回值是第一个出现的
p = re.findall(pattern,string,flags = 0)
功能:查找整个字符串,结果返回列表
因为findall返回列表,所以不是对象,没有goup方法,因此只有re.match和re.search返回对象,返回值有group方法。
单字符:
. : 匹配除了换行符以外的任意字符
[] : 匹配集合也就是[]里面的任意一个字符
[0-9] :匹配0至9之间任意一个字符 【注】:'-' 代表要连续的
[a-z] :匹配26个英文小写字符中任何一个
[A-Z] :匹配26个英文大写字母任意一个
[0-9a-zA-Z]: 匹配任意数字字母大小写任意一个字符
[liu]:匹配liu中任意一个字符
[^liu]: 匹配除了liu字符以外的任意一个字符
^:叫脱字符意思为不匹配这个集合
[注]:当^做整个表达式开始位置的时候,^开始叫边界符
边界符以^开始,必须以$结束
\d :匹配的是数字 效果相同[0-9]
\D :匹配除了数字以外 效果相同[^0-9]
\w: 匹配数字字母下划线 [0-9a-zA-Z_]
\W: 匹配非数字 字母 下划线以外的 [^0-9a-zA-Z_]
\s :匹配空字符,空格 \t \n ....
\S :匹配除了空白字符的任意字符
[注意]:在正则表达式不要随意使用空格,空格也是正则式中字符
r:
r'\w' : 修饰正则表达式时候的意义和修饰字符串的时候一样不同,修饰字符串的时候是失去转义字符的意义。在正则里表达式里会匹配‘\d’字符串,没有加上r的时候需要加上两根或三匹配斜线'\\\d'加上就按照我们正常的转义习惯,加上一个r'\\d'就可以匹配出字符串'\d',推荐以后正则表达式前边都加上r。
元字符:
元字符是用来修饰单字符的,一般是对其数量进行限制。
{n} :修饰元字符前边的单字符n次
{n,}: 修饰元字符前边的单字符出现至少n次 >=n
{n,m};修饰元字符前边的单字符至少出现 >=n and <=m
{,n}:修饰元字符出现次数是0--n
+ :修饰元字符前边单字符至少出现1次 >=1
*: 匹配的可以使0次 或者任意多次
?: 匹配出现1或者0次
边界符:
^: 以表达式开始,限制开始的首字符一定是^后边的单字符
$: 表达式结束,限制结束单字符必须是$前的单字符
\b: 词边界,开头 空格 逗号 句号,事实上\W就是词边界。(用re.search最好)
\B: 非词边界
分组和子模式:
| :两个表达式或者的关系
pa = re.compile(r'\d+|[a-z]+') # 空格 字母
res = pa.search('wertyu34567iloveyou')
子模式:子模式其实就是用小括号将重复用到的部分正则表达式包括起来,在后面直接使用。例如对第一个子模式调用用\1,调用第二个子模式用\2,减少正则重复书写。
还有一种和子模式功能相同的作用:(?P<name>正则式) (?P=name)同样达成子模式的作用。
贪婪模式:正则的匹配默认就是有多少匹配多少,是一种贪婪模式。有*和+
.+? 取消贪婪模式
.*? 取消贪婪模式
模式修正符:
修饰整个表达式:
re.I :忽略大小写
re.M: 视为多行
re.S:视为单行
功能函数:
sub:替换(字符串,源字符串)
当第一个参数是函数名的时候,函数的返回值必须是字符串
split:切割(正则表达式,原字符串) 以正则匹配的内容进行切割,返回值是列表
继续努力