四时宝库

程序员的知识宝库

Python正则表达式(python 正则表达)

从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:切割(正则表达式,原字符串) 以正则匹配的内容进行切割,返回值是列表

继续努力

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接