10.re模块

正则表达式模块,用于匹配特定字符串等功能。

正则表达式的优势

找到规律后定制规则,方便

匹配方式

re.findall		# 把所有匹配到的字符放到列表中返回
re.match		# 从头开始匹配,找到就返回,类似startswith
re.split		# 以满足规则的作为分隔符
re.search		# 全局匹配找到一个就不找了
re.sub			# 匹配字符并替换
re.fullmatch 	# 全部匹配

常用表达式规则

符号含义例子结果
.匹配除了’\n’外任意一个字符,若指定flag DOTALL则匹配所有字符
^匹配字符开头,若指定flags re.MULTILINE。每行分别匹配。re.search(r’^a’,’\nabc\neee’,flags=re.MULTILINE).group()’a‘
$匹配字符结尾,若指定flags re.MULTILINE。每行分别匹配。re.search(r’foo.$’,‘foo1\nfoo2’,flags=re.MULTILINE).group()’foo1’
*匹配*前字符0或多次re.search(‘a’,‘aaaabac’).group() re.search(‘a’,‘ba’)->匹配不到0次,a开头ok‘aaaa’
+匹配+前字符1或多次re.findall(‘ab+’,‘ab+cd+abb+bba’)[‘ab’,‘abb’]
?匹配前一个字符1次或0次re.search(‘b?’,‘alex’).group()‘’ (0次)
{m}匹配前一个字符m次re.search(‘b{3}’,‘alexbbbs’).group()‘bbb’
{n,m}匹配前一个字符n到m次re.findall(‘ab{1,3}’,‘abb abc abbcbbb’)[‘abb’,‘ab’,‘abb’]
|匹配|左或|右的字符re.search(‘abc|ABC’,‘ABCBabcCD’).group()‘ABC’
(…)分组匹配re.search(’(abc){2}a(123|45)’,‘abcabca456c’).group()‘abcabca45’
\A只从字符开头匹配,相当于re.matchre.search(’\Aabc’,‘alexabc’)匹配不到
\Z匹配字符结尾同$
\d匹配数字0-9
\D匹配非数字
\w匹配[A-Za-z0-9]
\W匹配非[A-Za-z0-9]
\s匹配空白字符\t、\n、\rre.search(’\s+’,‘ab\tc1\n3’).group()‘\t’
?P…分组匹配re.search(’(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{8})’,‘210302199107082173’).groupdict() .groups(){‘province’: ‘2103’, ‘city’: ‘02’, ‘birthday’: ‘19910708’} (‘2103’,‘02’,‘19910708’)

例子

获取手机号

import re

f = open('联系方式.txt','r',encoding='utf-8')
phone_list = re.findall("[0-9]{11}",f.read())
print(phone_list)

各种匹配方法

re.split('[0-9]','alex3jack44rain6mack')
re.findall('[0-9]+','alex3jack44rain6mack')
re.sub('abc','ABC','asdabcbasdjabc',count = 2) # 查找替换
re.fullmatch('[a-z]*','asdvasdasd').group() # 精确匹配

re.compile(pattern) # 避免很多行反复解析语法
result = prog.match(string)

Flags标志符

re.search('[0-9]','asd213',re.I)

# re.I(IGNORECASE):忽略大小写
# re.M(MULTILINE):多行模式,改变^$的行为
# re.S(DOTALL):改变.的行为,.可以匹配换行符
# re.X(VERBOSE):可以给表达式写注释
a = re.compile(r''' \d+# the intrgral part
					\. # the decimal point
					\d *# some fractional digits''',re.X)
b = re.compile(r'\d+\.\d*')
# a与b是一样的

练习题
计算公式中的值:
1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值