python正则表达式功能模块:re

matchObj = re.match(r'(\d+)([abcd]+)', '12bbcxyz')  #[abcd]表示:a或b或c或d
if matchObj:print matchObj.groups() #('12', 'bbc')print matchObj.group()  #12bbcprint matchObj.group(1) #12print matchObj.group(2) #bbc
#    print matchObj.group(3) #报错IndexError: no such group
else:print 'None match'

re.match()方法:

参数1是正则表达式匹配模式,参数2是待匹配的原始字符串;
此方法只从字符串的开头匹配,若开头不匹配即使字符串中间有子串能匹配也返回None。如参数2换为'a12bbcxyz'则输出None match

re.search()方法:

match方法参数一样,不过可以匹配字符串里面的子串,如参数2换为'a12bbcxyz'则输出不变。
matchsearch两个方法只能找到匹配参数1匹配模式的,从参数2原始字符串左起的第一个字符串。若想找到所有的匹配的字符串,用下面介绍的findall方法。

若匹配成功则返回一个匹配对象:matchObj:

其有group(num=0)groups()方法:
group(n)(n=1、2、3…)会返回同第n分组匹配的字符串(参数1匹配模式里的每个括号里是一个分组);
group()方法有默认参数0group(0)会返回同整个参数1模式匹配的字符串(这个非分组);
groups()方法返回所有分组组成的元组(若无分组返回空元组),第一个分组的组号为1。


findall方法:

findres = re.findall(r'\d[a-z]', '1one2two')
print findres  #['1o', '2t']
findres = re.findall(r'(\d)[a-z]', '1one2two')
print findres  #['1', '2']
findres = re.findall(r'(\d)([a-z])', '1one2two')
print findres  #[('1', 'o'), ('2', 't')]

若参数1匹配模式无分组:则返回所有同整个匹配模式匹配的字符串组成的列表;
若参数1有分组:若只有1个分组,则返回所有同分组匹配的字符串组成的列表;若分组数大于1,则返回所有同各分组匹配的字符串组成的元组的列表。

加入匹配标志位flags

pattern = re.compile('</div class="desc">(.*)</div>', re.M)
div_list = re.findall(pattern, page)
print(div_list)

正则替换:sub方法

普通字符串替换:

print 'ABC'.replace('A' , 'a') #aBC

正则替换:

print re.sub(r'\d', '*', '123bbc', count=2)   # **3bbc  count=2表示进行2次替换
print re.sub(r'\d+', '*', '123bbc', count=2)  # *bbc    此处只进行了1次替换
print re.sub(r'\d+?', '*', '123bbc', count=2) # **3bbc  加?表示非贪婪模式:最小范围匹配。进行了2次替换。

count参数指定从左边起替换几次,默认为0,表示全部替换;
此种情况下参数1匹配模式分组信息无效,只会对匹配整个模式的字符串进行替换。

另外sub方法的第二个参数除了可以是字符串外,还可以是替换函数:
替换函数接受的参数是匹配对象;
返回值是匹配整个模式的字符串将要被替换为的内容;
count参数决定替换函数执行的次数。

import re
def rep_f(matchObj):print matchObj.group()print matchObj.groups()return matchObj.group('group_b') #使用(?P<name>...)给分组2指定了一个别名group_b,group函数可以接受别名参数,此处相当于group(2)print re.sub(r'(\d+)(?P<group_b>b)', rep_f, '123bb234c123bbc123bbc', count=2)
#   输出:
#   123b
#   ('123', 'b')
#   123b
#   ('123', 'b')
#   bb234cbbc123bbc

字符串分割:

import re
print re.split(r'\d+(b)', '123bb234c123bbc123bbc', 2)
# ['', 'b', 'b234c', 'b', 'bc123bbc']

与参数1匹配模式中的分组匹配的字符串,会在分割后的返回值列表中出现;
参数3指定最大分割次数,也就是最多用几个能完整匹配参数1匹配模式的字符串分割。


各个方法的原型:

re.match(pattern, string, flags=0)              #返回值:匹配对象
re.search(pattern, string, flags=0)             #返回值:匹配对象
re.findall(pattern, string, flags=0)            #返回值:list
re.sub(pattern, repl, string, count=0, flags=0) #返回值:str, repl
re.split(pattern, string, maxsplit=0, flags=0) #返回值:list

其中flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。具体的:如re.I | re.M 被设置成 IM标志。

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

转载于:https://www.cnblogs.com/xuejianbest/p/10285137.html

Python:正则表达式相关推荐

  1. 编程软件python下载怎么读-使用最方便的计算机编程软件,Python下载使用完美教程...

    Python是一种通用的计算机编程软件,Python对程序员来说是一个非常有用的工具,它允许你快速地编写代码,并且我们使用软件做出的代码运行速度异常快,Python还具有别的软件不具有的突出点那么就是 ...

  2. python软件下载教程-使用最方便的计算机编程软件,Python下载使用完美教程

    Python是一种通用的计算机编程软件,Python对程序员来说是一个非常有用的工具,它允许你快速地编写代码,并且我们使用软件做出的代码运行速度异常快,Python还具有别的软件不具有的突出点那么就是 ...

  3. python没基础能自学吗-没学过编程可以自学python吗

    目前在很多行业中都在越来越多的应用Python,这也是很多行业学习Python的原因. 我认为是可以的,python语法简单明了,代码可读性高,容易入门.Python的哲学是「做一件事情应该只有一种最 ...

  4. python是什么和c++是什么区别_编程c++和python的区别

    展开全部 论坛 活动 招聘 专题 打开2113CSDN APP Copyright © 1999-2020, CSDN.NET, All Rights Reserved 登录 一颗日成 关注 浅谈52 ...

  5. python可以从大到小循环嘛_无需编程基础,Python从入门到进阶大法

    原标题:无需编程基础,Python从入门到进阶大法

  6. 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础简介及入门配置

    工作将近两年了,做过B/S结构的项目,也做过android,也做过C/S结构的项目,相信无论是那种项目都是基于Java.学习运用Java也已经好多年了,虽然也接触过C/C++,C#,.NET之类的开发 ...

  7. 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python 逻辑

    条件语句 if 条件语句: if (num >= 0 and num <= 5) or (num >= 10 and num <= 15): elif 条件语句: for nu ...

  8. 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python 正则表达式

    字符 . 表示任意除了\n的字符(一个) \ 转义字符(同各种语言) [-] 字符集 表示在字符集中的一个 ,可以,如[abc]表示不在abc中,如果需要使用特殊符号需要转义.所以想学的同学,有必要听 ...

  9. 《python透明人士,他是凭什么成为主流编程的宠儿?!》python基础语法

    Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发 ...

  10. 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础

    1. 写出变量命名时的规则 1 变量名的长度不定,但是其中的字符必须是字母.数字.或者下划线(_),不能使 用空格.标点符等其他字符. 2 变量名的第一个字符不能是数字,必须是字母或下划线. 3 不能 ...

最新文章

  1. [51单片机学习笔记ONE]-----LED灯的多种使用方法
  2. 计算相机采集帧率C实现
  3. 算法经典书籍--算法设计与分析基础
  4. jQuery 效果函数(三)
  5. eclipse mac 下载php文件夹,PHP Pydev Eclipse (linux or mac)
  6. 阿德:我在去哪儿干了些什么,3个月业绩400%提升
  7. Font Awesome 完美的图标字体
  8. LeetCode Algorithm 590. N 叉树的后序遍历
  9. java内部类的特点
  10. 如何简化React应用程序中的状态-轻松实现Redux
  11. 力扣编辑距离系列问题总结
  12. 发现一个很nice的API调试工具
  13. sql初学者指南_使用tSQLt框架SQL单元测试面向初学者
  14. java中 移位运算符_java中的移位运算符心得总结
  15. Verilog三段式状态机描述
  16. 全面理解搜索Query:当你在搜索引擎中敲下回车后,发生了什么?
  17. SHR之员工合同解除
  18. 基于Python的指数基金量化投资——指数数据获取
  19. 基于ROS2开发的点云体素化
  20. SDB光猫虚拟服务器,折腾光猫/路由器[MIPS架构](1):用Samba服务器搭建家庭文件共享中心...

热门文章

  1. 远控免杀专题(15)-DKMC免杀
  2. 怎么暂时关闭网站php,WordPress怎么临时关闭网站进行维护
  3. eclipse中图片大小用什么单位_建筑工程行业中各个单位都是什么样的关系?
  4. uva 437——The Tower of Babylon
  5. (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
  6. 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
  7. 【Linux系统编程学习】 GDB调试器的简单使用
  8. 【计算机思维】面向人的开发 站在巨人的肩膀上
  9. Linux进程通信之文件
  10. libpcap讲解与API接口函数讲解