python表达式3 5_Python3 正则表达式

1.导入正则表达式模块

import re

2.匹配数字

print(re.findall('[0-9]','qwe21ewq'))

输出结果:

f1a6f96e3e94

image

3.匹配字符

print(re.findall('[a-zA-Z]','abC'))

输出结果:

f1a6f96e3e94

image

匹配-,只需要令-挨着[就可以,不需要进行转义.如果-没有挨着[才需要进行转义

print(re.findall('[-0-9]','qw-e21ewq'))

输出结果:

f1a6f96e3e94

image

排除字符

print(re.findall('[^0-9]','qw-e21ewq'))

输出结果:

f1a6f96e3e94

image

如果想要匹配’’,只需要’’不挨着'[‘就行,如果挨着'[‘,就需要进行转义

4.概括字符集

\d=[0-9] digit

\w=[0-9a-zA-Z] word还可以匹配下划线

\s=[\t\r\n\v\f] space 制表符,回车符,换行符

\D,\W,\S分别与\d,\w,\s相反

.可以匹配任意字符除了换行符\n

5.数量词

print(re.findall(r'\d{3,5}','qw-e21231ewq'))

输出结果:

f1a6f96e3e94

image

数量词用法

\d{6} 出现6次数字

\d{4,6} 数字出现4-6次

\d{4,} 数字出现4-65536次

\d{0,6} 数字出现0-6次

*={0,}

+={1,}

?={0,1}

数量词默认用法是贪婪,如果在数量词后面加’?’,进行非贪婪

print(re.findall(r'\d{3,5}?','qw-e21231ewq'))

输出结果:

f1a6f96e3e94

image

6.定界符

print(re.findall(r'^\d{5}$','qw-e21231ewq'))

结果就是匹配不到,因为’^’代表从起始位置开始,’$’代表到末尾为止,所以这个字符串不能匹配

\A也代表从起始位置开始,\Z代表到结束位置开始,与$不同的是,\Z在匹配多行字符串时,只匹配整个字符串的结束位置,而不匹配中间的字符串的结束位置.

7.re.match和re.search

re.match(pattern,string[,flags] )和re.search(pattern,string[,flags])的区别是:

match是默认从字符串的起始位置开始的,而search就没有这个限制

print(re.match('\d{3}','a123'))

print(re.search('\d{3}','a123'))

输出结果:

f1a6f96e3e94

image

8.group分组

print(re.search('(\d{3})a(\w)','a123abc').group())

print(re.search('(\d{3})a(\w)','a123abc').group(1))

print(re.search('(\d{3})a(\w)','a123abc').group(2))

输出结果:

f1a6f96e3e94

image

9.re.findall

re.findall(pattern,string[,flags])以列表的形式返回所有符合条件的元素

print(re.findall('\d{5}','a21231casd12345'))

输出结果:

f1a6f96e3e94

image

10.re.sub

字符串替换

re.sub(pattern,replacement,string)

print(re.sub('\d{5}','*','abc126322defg'))

输出结果:

f1a6f96e3e94

image

第二个参数位置也可以传入一个函数,用来替换成更复杂的字符

def rpl(value):

rp=value.group()

if int(rp)<5:

return ''

else:

return '!'

print(re.sub(r'\d{5}',rpl,'abc126322defg'))

输出结果:

f1a6f96e3e94

image

11.括号的作用

(1)分组

print(re.findall('(ab)+','aab'))

输出结果:

f1a6f96e3e94

image

如果不加括号的话,就是要求’b’出现1次以上,而不是’ab’

(2)多选结构

print(re.findall('(\d{3}|[a-z]{3})','123abc'))

输出结果:

f1a6f96e3e94

image

(3)引用分组

<1>引用分组

print(re.search('(\d{3})a(\w)','a123abc').group())

print(re.search('(\d{3})a(\w)','a123abc').group(1))

print(re.search('(\d{3})a(\w)','a123abc').group(2))

输出结果:

f1a6f96e3e94

image

<2>反向引用

匹配重复的字母

print(re.findall(r'^([a-z])\1$','dd'))

输出结果:

f1a6f96e3e94

image

\1代表重复前面的分组1

<3>命名分组

print(re.search(r'(?P\d{4})-(?P\d{2})-(?P\d{2})','2000-01-02').group())

print(re.search(r'(?P\d{4})-(?P\d{2})-(?P\d{2})','2000-01-02').group('year'))

print(re.search(r'(?P\d{4})-(?P\d{2})-(?P\d{2})','2000-01-02').group('month'))

print(re.search(r'(?P\d{4})-(?P\d{2})-(?P\d{2})','2000-01-02').group('day'))

输出结果:

f1a6f96e3e94

image

<4>非捕获分组

print(re.search('(?:\d{3})a(\w)','a123abc').group())

print(re.search('(?:\d{3})a(\w)','a123abc').group(1))

输出结果:

f1a6f96e3e94

image

非捕获分组?:不影响匹配,但是非捕获分组不算组数

12.转义

如果是转义[a-z]或者{3},只需要[a-z]和{3}即可

但是如果遇到了'(‘,’)’,’|’,(两个括号一个竖线)这三个字符,需要在它们前面加上转义符

13.断言

(1)单词边界

单词边界\b,非单词边界\B

print(re.findall(r'\b\w+\b','I love Python!'))

输出结果:

f1a6f96e3e94

image

(2)环视

(?!) (?

否定环视: (?!)和(?=)

肯定环视: (?

环视的使用

例如 (?!/) 就代表匹配的字符串右边不能出现’/’

(?

肯定环视就是指如果匹配成功,在当前位置匹配成功

否定就是指匹配成功,在当前位置匹配失败

环视的最大特点就是匹配完成之后,还会停留在原地

print(re.sub(r'(?

输出结果:

f1a6f96e3e94

image

使用环视去掉了中英文混编时多余的空格,上面环视的意思就是匹配从某一个空白位置向左看不能出现字母,向右看也不能出现字母

14.匹配模式

1.不区分大小写

(?i)the

2.单行模式

(?s) 这种模式下.也可以匹配\n

3.多行模式

(?m)

4.注释模式

(?x)

print(re.findall(r'a','AbC',re.I))

输出结果:

f1a6f96e3e94

image

15.面向对象式

使用函数re.compile()

使用方法:

digitRegex=re.compile(r"\d+")

digitRegex.findall('12 3')或

re.findall(digitRegex,"12 3")

compile还可以查看详细信息

print(re.findall(r'a','AbC',re.I))

输出结果:

f1a6f96e3e94

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值