Python 学习之正则表达式「下」

re模块深入了解

字符串切割

# 切割字符串

s = "To   be a better man !"

print(s.split(" "))
print(re.split(r" +", s))  # 以一个或多个空格切割

finditer() 函数

# re.finditer() 函数,与 findall() 类似,扫描整个字符串,返回的是一个迭代器,节省内存

s = "To be a better man! To be a better man! To be a better man!"

x = re.findall(r"(better)", s)
print(x)

i = re.finditer(r"(better)", s)  # 迭代器
while 1:
    try:
        j = next(i)
        print(j)
    except StopIteration as e:
        break

字符串的替换和修改

re.sub(pattern, repl, string, count, flags=0) 与 re.subn(…) repl 用来替换的字符串,string 目标字符串,count 最多替换次数

作用:在目标字符串中以正则表达式的规则匹配字符串,再把他们替换成指定的字符串,可以指定替换的次数,如果不指定,替换所有的匹配字符串

区别:前者返回一个被替换的字符串,后者返回一个元组,元组的第一个元素为被替换的字符串,第二个元素为被替换的次数

s = "To be a better better better man!"

print(re.sub(r"(better)", "great", s))
print(type(re.sub(r"(better)", "great", s)))

print(re.subn(r"(better)", "great", s, 2))
print(type(re.subn(r"(better)", "great", s)))

分组 group

# 分组
phone = "010-8888888"
d = re.match(r"((\d{3})-(\d{7}))", phone)

# 使用序号获取对应组的信息,group(0) 代表原始字符串
print(d.group(0))

# 第一组
print(d.group(1))  # 010-8888888
print(d.group(2))  # 010
print(d.group(3))

# 查看匹配的各组的情况
print(d.groups())  # ('010-8888888', '010', '8888888')

编译 compile(pattern, flags=0)

编译:当我们使用正则表达式时,re 模块会做两件事:

1.编译正则表达式,如果正则表达式本身不合法,会报错 2.用编译后的正则表达式去匹配对象,如果编译成正则对象,简化了匹配过程

pat= r"^1(([3578]\d)|(47))\d{8}$"

print(re.search(pat, "13588888888"))

# 编译成正则对象
phone = re.compile(pat)
print(phone.search("13588888888"))

原文发布于微信公众号 - Python梦工厂(AzMark950831)

原文发表时间:2018-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nnngu

018 final 关键字的用途

final关键字的含义 final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,...

36360
来自专栏C语言及其他语言

【编程经验】变量的存储类型

在 C 语言中,变量是对程序中数据所占内存空间的一种抽象定义,定义变量时,用户定义变量的名、 变量的类型,这些都是变量的操作属性。不仅可以通过变量...

11210
来自专栏编程

MYSQL字符串截取总结:LEFT、RIGHT、SUBSTRING、SUBSTRING

在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理...

24590
来自专栏数据结构与算法

7620:区间合并

7620:区间合并 查看 提交 统计 提问 总时间限制:1000ms内存限制:65536kB描述 给定 n 个闭区间 [ai; bi],其中i=1,2,...,...

30460
来自专栏web前端教室

十一国庆节 之 “变量与函数同名时,会输出谁?”

看这样一个题目: b = function c() { a = 1, b = 2, c = 3; console.log(a); //1 ...

188100
来自专栏软件开发 -- 分享 互助 成长

C++STL之map的基本操作

STL中基本的关联式容器有map和set,它们都是以红黑树作为其底层的结构,具有非常高的查找、删除效率,内容会按照键值自动排序。 使用map的注意事项: 1、关...

21890
来自专栏陈树义

如何唯一确定一个 Java 类?

今天偶然想起之前和朋友讨论过的一个问题:如何唯一确定一个 Java 类?我相信大多数朋友遇到这个问题的回答都是:类的全路径呗。但事实上,唯一确定一个 Java ...

25530
来自专栏老司机的技术博客

人人都能学会的python编程教程10:调用函数

要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。

969130
来自专栏和蔼的张星的图像处理专栏

684. 缺少的字符串分解到vector中借助find函数

先把两个字符串都分解到vector中,以空格为标志,然后在借助find函数来找出两个vector中不同的单词。

14630
来自专栏C/C++基础

vector向量容器元素排序与查找

vector向量容器没有提供根据元素查找的成员,可使用find函数来完成。 参考源码:

18630

扫码关注云+社区

领取腾讯云代金券