正则表达式,简称为regex,是文本模式的描述方法。例如,\d是一个正则表达式,表示一位数字字符,即任何一位0到9的数字。

使用步骤

python中所有正则表达式的函数都在re模块中。

▎python中使用正则表达式的步骤如下:

①用import re导入正则表达式模块;

②用re.compile()函数创建一个Regex对象。

③向Regex对象的search()方法传入想查找的字符串。它返回一个Match对象。

④调用Match对象的group()方法,返回实际匹配文本的字符串。

字符分类

字符类型               字符含义

\d               0到9的任何数字

\D               除0到9的数字以外的任何字符

\w               任何字母、数字或下划线(单词)

\W               除字母、数字和下划线以外的任何字符

\s               空格、制表符或换行符(空白)

\S               除空格、制表符和换行符以外的任何字符

正则表达式符号

?                            匹配零次或一次前面的分组

*                            匹配零次或多次前面的分组

+                            匹配一次或多次前面的分组

|                            匹配多个表达式中的一个

()                           使用括号创建"分组"

{n}                          匹配n次前面的分组

{n,}                         匹配n次或更多前面的分组

{,m}                         匹配零次到m次前面的分组

{n,m}                        匹配至少n次、至多m次前面的分组

{n,m}?或*?或+?               对前面的分组进行非贪心匹配

^spam                        字符串必须以spam开始

spam$                        字符串必须以spam结束

.                            匹配所有字符,换行符除外

\d、\w和\s                   匹配数字、单词和空格

\D、\W和\S                   匹配出数字、单词和空格外的所有字符

[abc]                        匹配方括号内的任何字符

[^abc]                       匹配不在方括号内的任何字符

正则表达式方法

1、compile()

向re.compile()传入一个字符串值,表示正则表达式,它将返回一个Regex模式对象。

如果要忽略正则表达式字符串中的空白符和注释,可以传入变量re.VERBOSE。

如果要不区分大小写,可以传入re.IGNORECASE或re.I。

如果要句点字符匹配换行,可以传入re.DOTALL。

re.compile()函数只接受一个值作为它的第二参数,可以用管道符将变量组合起来,从而绕过这个限制。>>> import re

>>> phoneNum=re.compile(r'\d\d\d-\d\d\d\d\d\d\d\d')

2、group()

Match对象有一个group()方法,它返回被查找字符串中实际匹配的文本。

添加括号将在正则表达式中创建”分组“。正则表达式字符串中的第一对括号是第1组。第二对括号是第2组。向group()匹配对象方法传入整数1或2,就可以取得匹配文本的不同部分。向group()方法传入0或不传入参数,将返回整个匹配的文本。如果想要一次就获得所有的分组,就使用groups()方法。>>> import re

>>> phoneNum=re.compile(r'(\d\d\d)-(\d\d\d\d\d\d\d\d)')

>>> mo=phoneNum.search('My number is 021-68000000')

>>> print(mo.group(0))

021-68000000

>>> print(mo.group(1))

021

>>> print(mo.group(2))

68000000

>>> print(mo.groups())

('021', '68000000')

3、search()

Regex对象的search()方法查找传入的字符串,寻找该正则表达式的所有匹配。如果字符串中没有找到该正则表达式模式,search()方法将返回None。如果找到了该模式,search()方法将返回一个Match对象。>>> import re

>>> phoneNum=re.compile(r'\d\d\d-\d\d\d\d\d\d\d\d')

>>> mo=phoneNum.search('My number is 021-68000000')

>>> print(mo.group())

021-68000000

4、findall()

search()将返回一个Match对象,包含被查找字符串中的”第一次“匹配的文本,而findall()方法将返回一组字符串,包含被查找字符串中的所有匹配。

▎作为findall()方法的返回结果,有如下两点需要注意:

①如果调用在一个没有分组的正则表达式上,例如\d\d\d-\d\d\d-\d\d\d\d,将返回一个匹配字符串的列表,如['123-456-7890','000-000-0000']。

②如果调用在一个有分组的正则表达式上,例如(\d\d\d)-(\d\d\d)-(\d\d\d\d),将返回一个字符串的元组的列表,如[('123','456','7890'),('000','000','0000')]>>> import re

>>> phoneNum=re.compile(r'(\d\d\d)')

>>> phoneNum.search('68000000')

>>> phoneNum.findall('68000000')

['680', '000']

5、sub()

sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹配。第二个参数是一个字符串,即正则表达式。sub()方法返回替换完成后的字符串。>>> import re

>>> phoneNum=re.compile(r'021-6800')

>>> phoneNum.sub('8800','My number is 021-68000000.')

'My number is 88000000.'

贪心与非贪心

python的正则表达式默认是”贪心“的,这表示在有二义的情况下,它们会尽可能匹配最长的字符串。花括号的”非贪心“版本匹配尽可能短的字符串,即在结束的花括号后跟一个问号。

问号在正则表达式中可能有两种含义:声明非贪心匹配或表示可选的分组。这两种含义是完全无关的。>>> import re

>>> phoneNum01=re.compile(r'(\d\d\d){1,3}')

>>> phoneNum02=re.compile(r'(\d\d\d){1,3}?')

>>> mo01=phoneNum01.search('68000000')

>>> mo02=phoneNum02.search('68000000')

>>> mo01.group()

'680000'

>>> mo02.group()

'680'

java jui 正则表达式_正则表达式-Gorilla City-51CTO博客相关推荐

  1. java 主题爬虫_主题爬虫 - 长颈鹿Giraffe - 博客园

    参考了一些论文和网上的资料以及清华大学出版社出版的<自己动手写网络爬虫>这本书中的部分章节,设计了主题爬虫的主要体系结构如下图所示: Heritrix是一个由 java 开发的.开源的网络 ...

  2. java synoch 加锁_线程间通信 - HappyCowboy - 博客园

    线程之间需要一些协调通信,来共同完成一件任务.Java多线程中,线程之间通信最常用的两个方法是wait()与notify() 使用wait()与notify()实现线程间的通信,需注意: ①wait( ...

  3. 老男孩51CTO博客博文列表整理版20170620更新

    老男孩51CTO博客博文列表整理版 (本文原自于一道考试题http://oldboy.blog.51cto.com/2561410/1860985) 老男孩教育运维脱产班35期  刘同学 2017-0 ...

  4. 51CTO博客——架起我与读者沟通、见面的桥梁[博友话题]

    说到我与51CTO的故事,相信比较早期加入51CTO的博友都可能了解一些,因为我也在早期的好几篇博文中都专门的介绍.总体来说,我与51CTO博客之间的小故事.大故事还很多,因为我与51CTO的合作比较 ...

  5. Python 爬取51cto博客标题浏览量、评论量、收藏

    介绍 提到爬虫,互联网的朋友应该都不陌生,现在使用Python爬取网站数据是非常常见的手段,好多朋友都是爬取豆瓣信息为案例,我不想重复,就使用了爬取51cto博客网站信息为案例,这里以我的博客页面为教 ...

  6. 第一次使用51cto博客

    阿梅第一次使用51cto博客,以后将学习中的总结写到这里来.加油. 转载于:https://blog.51cto.com/hopit/1690465

  7. 怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新

    怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新

  8. 无人驾驶运动学模型——线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制 转

    无人驾驶运动学模型--线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制

  9. 关于我的51CTO博客

    经过反复的比较,最终选择了51CTO作为我的新的博客地址.以后,我会保持这个博客与我的赛迪博客在安全管理与审计领域博文的同步,同时维护TT安全博客上的精华文章,我打算未来将51CTO博客作为我的主博客 ...

  10. 51CTO博客2.0意见反馈处【2018版】

    12年磨一剑,我们在2017年年底完成了博客1.0到2.0的变革. 全新博客2.0平台,尤其关注写作体验.移动阅读和知识变现. 现在我们已经夯实了基础建设,但为了给大家提供更好的创作.阅读体验,我们还 ...

最新文章

  1. ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
  2. 三十一、CI框架之使用验证码
  3. 双指针算法之快慢指针(二):力扣【寻找链表的第N个点】leetcode-876、19
  4. Linux下C/C++开发工具注意事项
  5. 蛮力写算法_蛮力算法解释
  6. android逆向分析有什么用,如何开始对Android应用的逆向分析?
  7. matlab条形指纹拼接,matlab实现的两幅指纹图像的拼接
  8. 学习http only cookie以及javascript创建cookie的方式
  9. 检查数组中的子字符串– Java,Python和Swift
  10. 基于Python的旅游管理系统-小程序
  11. 回溯法求解n个元素的集合的幂集
  12. 迅雷手机版苹果版_「9月22日」最新 苹果IOS手机迅雷Beta版证书修复版 安卓不限速...
  13. 菱形的常见图案_菱形图案,简约而不简单
  14. 【题解】codeforces 1023G. Pisces 最长反链 数据结构维护差分 启发式合并
  15. ai怎么让图片任意变形_ai文字怎么随意变形?ai文字变形技巧教程
  16. 网络调试助手简单使用教程
  17. amcharts的使用介绍
  18. PCB板材的基础知识
  19. Stream流创建,常用方法
  20. 持续火爆!2021年上半年软考四川参考率64.2%,云南全年报考规模上升8.4%,浙江报考人数增长56.2%

热门文章

  1. mysql操作SQL语句
  2. Bash学习系列---第2/3部分
  3. 转载:LOG_ARCHIVE_DEST_n参数属性——DATA GUARD概念和管理
  4. asp.net网页编程 ASP.NET中绑定枚举类型
  5. 大数据分析如何助力企业发展业务
  6. c语言设计程序注释说明位于,C语言程序设计试题及答案A
  7. c 提示错误expected) before ; token_NLP.TM[33] | 纠错:pycorrector的错误检测
  8. es文件浏览器怎么用_ES文件浏览器——安卓第一文件管理APP
  9. java变量类型概念_java变量类型
  10. 计算机审计 报告哦,计算机审计实训报告