博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python——re模块
阅读量:5009 次
发布时间:2019-06-12

本文共 2796 字,大约阅读时间需要 9 分钟。

re模块

1. 匹配常用方法

(1) findall

  返回值:列表:列表中是所有匹配到的项

import reret = re.findall('a','eva egon yuan')       #['a', 'a']print(ret)ret = re.findall('[a-z]+','eva egon yuan')      #['eva', 'egon', 'yuan']print(ret)
View Code

(2) search

  ret = search('\d(\w)+','bdsjdbc14564fvfv')

  ret = search('\d(?P<name>\w)+','bdsjdbc14564fvfv')   #给分组命名为name

  找整个字符串,遇到匹配上的就返回,遇不到就返回None

  如果有返回值,ret.group()就可以取到值

  取分组中的内容:ret.group(1)  #按照组的顺序(从第一个开始)

          ret.group('name')  #按照组的名字

import reret = re.search('a','eva egon yuan')print(ret)  #<_sre.SRE_Match object; span=(2, 3), match='a'>print(ret.group())  #a
View Code

 

import re# 报错:如果没有找到结果,那么返回None,调用group会报错# ret = re.search('m','eva egon yuan')# print(ret)  #None# print(ret.group())  #AttributeError: 'NoneType' object has no attribute 'group'# 使用下面方法不报错# (1) 找到结果ret = re.search('a','eva egon yuan')if ret:    print(ret.group())  #a#  (2) 没有找到结果ret = re.search('m','eva egon yuan')if ret:    print(ret.group())  #无任何结果,也不报错
View Code

(3) match

   从头开始匹配,匹配上就返回,匹配不上就返回None

  匹配上:ret.group()取值

import re# 如果正则规则从头开始可以匹配上,则返回一个变量,调用group显示# 如果没匹配上,就返回None,调用group会报错ret = re.match('[a-z]+','eva egon yuan')if ret:    print(ret.group())  #eva
View Code

2. 其他常用方法

(1) 分割 split

import re# 先按照'a'分割得到''和'bcd',再对''和'bcd'分别按照'b'分割ret = re.split('[ab]','abcd')print(ret)  #['', '', 'cd']
View Code

(2) 替换 sub  subn

import re# 将数字替换成'H',参数1表示替换一次ret = re.sub('\d','H','eva3egon4yuan4',1)print(ret)  #evaHegon4yuan4
View Code

 

import re# subn# 将数字替换成'H',返回替换结果和替换次数ret = re.subn('\d','H','eva3egon4yuan4')print(ret)  #('evaHegonHyuanH', 3)
View Code

(3) 返回迭代器 finditer

  返回很多值,不想让它们一次性全部出现在内存里

import re# 返回一个存放匹配结果的迭代器ret = re.finditer('\d','ds3sy4764384a')print(ret)  #
# 查看第一个结果print(next(ret).group()) #3# 查看第二个结果print(next(ret).group()) #4# 查看剩余的所有结果print([i.group() for i in ret]) #['7', '6', '4', '3', '8', '4']# 查看所有匹配结果:循环打印其中的数字ret = re.finditer('\d','ds3sy4764384a')for i in ret: print(i.group()) # 3 4 6 7 3 8 4
View Code

(4) 编译 compile

  正则表达式很长且要多次使用

import re# 将正则表达式编译成一个正则表达式对象obj = re.compile('\d{3}')   #此规则要匹配3个数字ret = obj.search('abc123eeee')print(ret.group())  #123ret = obj.search('412e')print(ret.group())  #412ret = obj.search('abgfnjgn78967ee')print(ret.group())  #789
View Code

3. 分组优先

(1)findall的优先级查询——?:

import reret = re.findall('www.(baidu|oldboy).com','www.oldboy.com')print(ret)  #['oldboy']# ?:——取消分组优先ret = re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')print(ret)  #['www.oldboy.com']
View Code

(2)split的优先级查询——()

import reret = re.split("\d+","eva3egon4yuan")print(ret)  #['eva', 'egon', 'yuan']# 加()——取消分组优先ret = re.split("(\d+)","eva3egon4yuan")print(ret)  #['eva', '3', 'egon', '4', 'yuan']
View Code

 

 

转载于:https://www.cnblogs.com/xc-718/p/9757212.html

你可能感兴趣的文章
shell输出输入流常用符号解释
查看>>
1.线程生命周期
查看>>
border_mode
查看>>
printf中的short int, int, long int和long long int
查看>>
sqlHelper做增删改查,SQL注入处理,存储值,cookie,session
查看>>
[Project Euler]Problem 29
查看>>
oracle 批量删除触发器
查看>>
在windows server 2003 IIS6下安装PHP 5.3x
查看>>
解决 Electron 5.0 版本出现 require is not defined 的问题
查看>>
Java集合的Stack、Queue、Map的遍历
查看>>
C#中的特性(Attributes)
查看>>
列表、元组、字典、集合的定义、操作与综合练习
查看>>
设计模式六大原则(5):迪米特法则
查看>>
iOS中使用nil NULL NSNULL的区别
查看>>
操作系统实验3:内存分配与回收
查看>>
Paul Graham:梦寐以求的编程语言
查看>>
C#开发中使用配置文件对象简化配置的本地保存
查看>>
工厂模式
查看>>
Shiro学习
查看>>
9、第九节课jquery选择器jq2,20151007
查看>>