• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

博客园    首页    新随笔    联系   管理    订阅  订阅
正则表达式--RE模块常用函数

在python当中使用正则表达式,主要是通过通过python提供的一个模块--re,这个模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用他们来进行匹配。
编译正则表达式,编译后的正则,要比未编译的正则,匹配速度快很多

#首先导入re模块
import re
r = r'\d{3,4}-?\d{8}$'  #定义一个正则
p_tell = re.compile(r) #编译正则,给对象p_tell
print(p_tell.findall('010-12345678')) #此时就可以直接这么用

在编译过程中也可以接受可选的标识参数,让正则更灵活。例如:

csvt_re = re.compile(r'csvt',re.I)#编译过程中加上re.I这个参数就是不分大小写,re.I是正则的一个属性
print(csvt_re.findall('CSVT'))
print(csvt_re.findall('csvt'))
print(csvt_re.findall('cSvT'))

# 打印结果:['CSVT']
#          ['csvt']
#          ['cSvT']

在定义正则时,反斜杠会比较麻烦,这时可以在字符串前加‘r’,反斜杠就不会被任何特殊方式处理

执行匹配
match():决定re是否在字符串刚开始的位置匹配

import re
csvt_re = re.compile(r'csvt',re.I)  #编译正则

print(csvt_re.match('csvt hello')) #匹配到会返回一个对象
print(csvt_re.match('hello'))  #匹配不到会返回一个空None
print(csvt_re.match(' hello csvt'))
#在实际程序中,最常见的做法是把MacthObject保存在一个变量里,然后检查它是否为None
x = csvt_re.match('hello csvt ')
if x:
    print('匹配到了!')
else:
    print('未匹配到!')

search():扫描整个字符串,找到re匹配的位置

import re
csvt_re = re.compile(r'csvt',re.I)  #编译正则

print(csvt_re.search('hello csvt'))  #有结果,返回一个对象
print(csvt_re.search('csvt hello'))  #有结果,返回一个对象
print(csvt_re.search('hello csvt hello'))  #有结果,返回一个对象
print(csvt_re.search('hello hello'))  #没有有结果,返回None

findall():找到re匹配的所有子串,并把他们作为一个列表返回

import re
csvt_re = re.compile(r'csvt',re.I)
print(csvt_re.findall('hello csvt hello csvt csvt'))

#打印结果:['csvt', 'csvt', 'csvt']


实例方法
group():返回被re匹配的字符串

#首先导入re模块
import re
csvt_re = re.compile(r'csvt',re.I)
#re.match()方法,返回的是一个对象,接着使用.group()方法,可以直接返回匹配的到字符
print(csvt_re.match('csvt hello'))
print(csvt_re.match('csvt hello').group())

#打印结果依次为:<_sre.SRE_Match object; span=(0, 4), match='csvt'>
#               csvt

start():返回匹配开始的位置
end():返回匹配结束的位置
span():返回一个元组包含匹配(开始,结束)的位置

模块级函数
--re模块也提供了顶级函数调用如:match()、search()、sub()、subn()、split()、findall()等
sub()    subn()

import re
csvt_re = re.compile(r'csvt',re.I)  #定义一个正则

s = 'csvt caat cvvt cccc'
rs = r'c..t'
print(re.sub(rs,'python',s))
print(re.subn(rs,'python',s))

#打印结果:python python python cccc
#         ('python python python cccc', 3)   subn()打印结果多了一个数字,一共替换了多少次

split():切割

import re

s = '123+456-789*000'
print(re.split(r'[\+\-\*]',s))

#打印结果:['123', '456', '789', '000']

 





posted on 2019-07-18 15:49  搁浅小夕  阅读(434)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3