正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re 模块使 Python 语言拥有全部的正则表达式功能。
import re
r=re.match('abc', 'abchadajabcadjlae')# 在起始位置匹配
print(r.group())#返回匹配到的内容
print(r.span())#返回匹配内容的位置,结果为一个元组,(开始位置,结束位置)
#结果:abc
(0, 3)
m= re.match('abc', 'hadajabccadjlae')# 不在起始位置匹配
print(r)
#结果:None
s= re.search('abc', 'hadajabccadjlae')
print(s.group())
print(s.span())
#结果:abc
(5, 8)
f = re.findall('cba','ahkjdcbasdkjalcbasakldjacba')
print(f)
#结果;['cba', 'cba', 'cba']
以上可以使用compile生成一个正则表达式对象,功函数使用如:
c=re.compile('cba')
f = c.findall('ahkjdcbasdkjalcbasakldjacba')
print(f)
#结果;['cba', 'cba', 'cba']
单个字符的匹配:
c=re.findall('\w','n3\\\!@#h你哈')
print(c)
#输出结果:['n', '3', 'h', '你', '哈'
c=re.findall('\d','sd2dsd4eds18d5d')
print(c)
#输出结果:['2', '4', '1', '8', '5']
次数限定;用于修饰前面单个字符出现的次数
a=re.findall('\d+','sd2dsd4eds18d5d')
print(a)
#输出结果:['2', '4', '18', '5']
a=re.findall('\d{2,3}','sd2d4ed18d235dsd3467d12')
print(a)
#输出结果:['18', '235', '346', '12']
a=re.findall('\d{2,}','sd2d4ed18d235dsd3467d12')
print(a)
#输出结果:['18', '235', '3467', '12']
边界限定
a=re.findall('^hello', 'asjdhelloaskd')
print(a)
#输出结果:[]
f = re.findall('world$', 'asjdhelloaskworld')
print(f)
#输出结果:['world']
c=re.compile('(\d+)([a-z]+)(\d+)')
s=c.search('hddh23hxhjja45hhj')
if s:
# 0:表示完整匹配内容,之后的数字表示第几组,也就是第几个()匹配的内容
print(s.group(0), s.span(0))#结果为 23hxhjja45 (4, 14)
print(s.group(1), s.span(1))#结果为 23 (4, 6)
print(s.group(2), s.span(2))#结果为 hxhjja (6, 12)
print(s.group(3), s.span(3))#结果为 45 (12, 14)
#findall:按照正则进行匹配,但是添加()后,结果只显示()匹配的内容
a=re.findall('w(ab)sd','qwabsde')
print(a)#结果为 ['ab']
# 字符串是固定切割,不能解决某类的匹配切割问题
# 按照正则进行切割
string = '正则其实不难1但是学完之后2发现什么也不出来3是这样吧'
c = re.compile(r'\d')#根据数字切割
ret=c.split(sting)
print(ret)
#结果:['正则其实不难', '但是学完之后', '发现什么也不出来', '是这样吧']
#整体方案
print(re.split(r'\d',string))
s = 'how1are2you'
s2 = re.sub(r'\d', '+', s)
print(s2)
#结果;how+are+you
# 替换时可以传递一个函数,使用函数的返回值进行替换
def double(s): #参数是根据正则匹配得出的结果
return str(int(s.group()) * 2)
# 使用专门的处理函数,可以认为的干预替换过程
s2 = re.sub(r'\d', double, s)
print(s2)
#结果:how2are4you