Python中的正则表达式是通过 re 模块实现的.

通配符 .  表示除了换行以外的任何字符;

编写正则表达式时使用  r're'  , r + 正则表达式内容

>>> import re
>>>
>>> re.search(r'Fish.','I love FishC.com!')
<_sre.SRE_Match object; span=(7, 12), match='FishC'>
>>> # 如果要匹配 . 本身  使用  \.

\d 表示 数字字符

>>> re.search(r'\d','I love FishC.com 123 !')
<_sre.SRE_Match object; span=(17, 18), match='>
>>>

[] 匹配到中括号里面的任何一个字符,都算匹配成功

>>> re.search(r'[aeiou]','I love FishC.com !')
<_sre.SRE_Match object; span=(3, 4), match='o'>
>>> 

[]中可以使用 - 表示范围

>>> re.search(r'[a-z]','I love FishC.com !')
<_sre.SRE_Match object; span=(2, 3), match='l'>
>>> 

{m,n} 被匹配的次数区间

>>> re.search(r'ab{2,3}c','aabbccddacc')
<_sre.SRE_Match object; span=(1, 5), match='abbc'>
>>> 

匹配IP

>>>
>>> # 匹配IP ,从实践可以看出几个或在一起,第一个匹配上就不再匹配第二个
>>>
>>>
>>> re.search(r'((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)','192.168.1.12')
<_sre.SRE_Match object; span=(0, 12), match='192.168.1.12'>
>>> 

小甲鱼Python3 正则表达式 官方文档翻译讲解地址

Python3 如何优雅地使用正则表达式(详解一)http://bbs.fishc.com/thread-57073-1-1.html

Python3 如何优雅地使用正则表达式(详解二)http://bbs.fishc.com/thread-57188-1-1.html

Python3 如何优雅地使用正则表达式(详解三)http://bbs.fishc.com/thread-57207-1-1.html

Python3 如何优雅地使用正则表达式(详解四)http://bbs.fishc.com/thread-57271-1-1.html

Python3 如何优雅地使用正则表达式(详解五)http://bbs.fishc.com/thread-57317-1-1.html

Python3 如何优雅地使用正则表达式(详解六)http://bbs.fishc.com/thread-57362-1-1.html

Python3 如何优雅地使用正则表达式(详解七)http://bbs.fishc.com/thread-57438-1-1.html

Python3 正则表达式特殊符号及用法(详细列表)http://bbs.fishc.com/thread-57691-1-1.html

\ 的作用:

  1) 将普通字符变成特殊字符,   \d

2)  解除元字符的特殊功能,    \.

3) 引用序号对应的子组所匹配的字符串  1-99 ;如果序号以0开头或者是3位数字长度,那么不会被应用于对应的子组,而是用于匹配八进制数字所表示的ASCII码值对应的字符

>>>
>>> re.search(r'(FishC)\1','I love FishC.com')
>>> re.search(r'(FishC)\1','I love FishCFishC.com')
<_sre.SRE_Match object; span=(7, 17), match='FishCFishC'>
>>> 

[] 讲解:
  它是一个字符类,除了几个特殊的字符,其它字符在里面都是普通字符,比如 - 是特殊字符  . 是普通字符

[\n] ,匹配 \n 本身 ,[a-z-], -放在最后表示匹配-自身  [^a-z] 取反(匹配的是除了a-z之外的),如果[a-z^]表示匹配a-z和^本身

>>> re.search(r'.', 'I love FishC.com')
<_sre.SRE_Match object; span=(0, 1), match='I'>
>>> re.search(r'[.]', 'I love FishC.com')
<_sre.SRE_Match object; span=(12, 13), match='.'>
>>>
>>> # 下面我们使用 findall 函数
>>> #findall函数是返回所有匹配的字符串,并生成列表返回
>>> re.findall(r'[a-z]','FishC.com')
['i', 's', 'h', 'c', 'o', 'm']
>>> 

* 等价于 {0,}   ,    + 等价于 {1,}   ,    ? 等价于 {0,1}

建议使用 *,+,?  他们的效率 比 {}高

贪婪 & 非贪婪 

Python的正则表达式默认是启用了贪婪的模式

贪婪就是只要在符合的条件下尽可能多的匹配

>>>
>>> s = '<html><title> I love FishC.com</title></html>'
>>> re.search(r'<.+>',s)
<_sre.SRE_Match object; span=(0, 45), match='<html><title> I love FishC.com</title></html>'>
>>>
>>> # 启用非贪婪 , 在表示重复的元字符后面加问号?,这时的?不代表0或1次

>>> re.search(r'<.+?>',s)
<_sre.SRE_Match object; span=(0, 6), match='<html>'>
>>> 

 \b 匹配一个单词的边界,单词被定义为 Unicode的字母数字或下划线字符

\B 与 \b相反

>>> re.search(r'\bFishC\b','I love FishC.com FishC_com FishC')
<_sre.SRE_Match object; span=(7, 12), match='FishC'>
>>> re.findall(r'\bFishC\b','I love FishC.com FishC_com FishC')
['FishC', 'FishC']
>>> 

\s 匹配Unicode中的空白字符(包括\t\r\n\f\v)以及其它空白字符

\w 匹配任何Unicode中定义的单词字符

>>>
>>> re.findall(r'\w','我爱你 (I love you!)')
['我', '爱', '你', 'I', 'l', 'o', 'v', 'e', 'y', 'o', 'u']
>>> 

编译正则表达式

如果需要重复地使用某个正则表达式,那么可以先将该正则表达式编译成模式对象。

使用 re.compile()方法来编译...

>>> p = re.compile(r'[a-z]')
>>> type(p)
<class '_sre.SRE_Pattern'>
>>> p.search('I love FishC.com')
<_sre.SRE_Match object; span=(2, 3), match='l'>
>>> p.findall('I love FishC.com')
['l', 'o', 'v', 'e', 'i', 's', 'h', 'c', 'o', 'm']
>>> 

编译标志

编译标志让你可以修改正则表达式的工作方式。在re模式下,编译标志均有两个名字:完整名和缩简写

标志                          含义

ASCII,A                    使得转义符号入\w,\b,\s和\d 只能匹配ASCII字符

DOTALL,S           使得.匹配任何符号,包括换行符

IGNORECASE,I          匹配时不区分大小写

LOCALE,L                 支持当前的语言(区域)设置

MULTILINE,M           多行匹配,影响 ^ $

VERBOSE,X(for 'extended')   启用详细的正则表达式

search()方法, 返回的是一个 匹配对象

可以使用匹配对象的相关方法获取匹配的内容, 如果里面有 子元组 ,group(n) ,可以获取里面的子元组内容

>>>
>>> result = re.search(r' (\w+) (\w+)','I love FishC.com')
>>> type(result)
<class '_sre.SRE_Match'>
>>> result.group()
' love FishC'
>>> result.group(1)
'love'
>>> result.group(2)
'FishC'
>>> result.start()
1
>>> result.end()
12
>>> result.span()
(1, 12)
>>> 

findall()方法, 在没有子组的情况下,返回匹配到的内容组成的列表,如果里面包含了子组,就会把子组内容单独返回,如果有多个子组,作为元组的形式返回各个子组内容

(?...)  (?开头的表示为正则表达式的扩展语法

(?:...)  , 非捕获组 ,即该子组匹配的字符串无法从后边获取

#不是我们想要的结果
>>> re.findall(r'((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)','192.168.1.12')
[(')]
>>> # 是我么你想要的结果,改为非捕获组
>>> re.findall(r'(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)','192.168.1.12')
['192.168.1.12']
>>> 

Python学习笔记013_正则表达式的更多相关文章

  1. python学习笔记之——正则表达式

    1.re模块 Python通过re模块提供对正则表达式的支持,re 模块使 Python 语言拥有全部的正则表达式功能.使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用 ...

  2. Python学习笔记 - day10 - 正则表达式

    正则表达式 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样 ...

  3. Python学习笔记(正则表达式)

    \b - 表示以什么开头或结尾 \d - 匹配数字 \w - 匹配字母或数字或下划线或汉字(我试验下了,发现3.x版本可以匹配汉字,但2.x版本不可以) \s - 匹配任意的空白符 ^ - 匹配字符串 ...

  4. Python学习笔记之正则表达式

    本篇在写的时候大量参考了https://deerchao.cn/tutorials/regex/regex.htm的内容 一.什么是正则表达式 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂 ...

  5. 【Python学习笔记】正则表达式

    Ref:https://deerchao.net/tutorials/regex/regex.htm#greedyandlazy 1. 常用元字符 2.字符转义 查找元字符本身时,需要使用\来取消这些 ...

  6. 【目录】Python学习笔记

    目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...

  7. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  8. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  9. Python学习笔记,day5

    Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...

随机推荐

  1. Oracle使用SQL传输表空间

    源环境:RHEL 6.4 + Oracle 11.2.0.4 目的环境:RHEL 6.4 + Oracle 11.2.0.4 DG双机 要求:使用SQL传输表空间DBS_D_JINGYU从源环境到目的 ...

  2. HDU 4941 Magical Forest(2014 Multi-University Training Contest 7)

    思路:将行列离散化,那么就可以用vector 存下10W个点 ,对于交换操作 只需要将行列独立分开标记就行   . r[i] 表示第 i 行存的是 原先的哪行         c[j] 表示 第 j ...

  3. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  4. Linux 环境下如何使 Chrome 浏览器字体更漂亮

    Windows 就免谈了,本身字体渲染技术 Cleartype 以及 DirectWrite 就稀烂得一塌糊涂.Mac 下面本来字体渲染就很好,所以关键就是在 Linux 下如何使 Chrome 的字 ...

  5. Android消息推送之各种方案的对比

    C2DM/GCM: 优点:免费,搭建方便 缺点:依赖谷歌服务器:免费服务有上限:依赖谷歌服务包:需要2.2+版本的安卓系统才支持:对网络状况有一定要求,接收不可靠.(也是基于XMPP协议) XMPP( ...

  6. Ubuntu14.04安装PHP5

    因为任务需要在Ubuntu14.04的server版本下安装PHP5,所以总结一下   使用root进行安装  要么在前面加上sudo进行安装. apt-get install php5-cgi ap ...

  7. tp框架知识 之(链接数据库和操作数据)

    框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ...

  8. django系列3 :创建模型

    1创建模型 在我们简单的民意调查应用程序中,我们将创建两个模型:Question和Choice.A Question有问题和出版日期.A Choice有两个字段:选择的文本和投票记录.每个Choice ...

  9. [转帖]Linux下fork函数及pthread函数的总结

    Linux下fork函数及pthread函数的总结 https://blog.csdn.net/wangdd_199326/article/details/76180514 fork Linux多进程 ...

  10. APP-9.1-百度应用-文字识别

    1.创建应用-文字识别 https://console.bce.baidu.com/ai/#/ai/ocr/app/list 尽量勾选:文字识别.百度语音.图像设别.人脸识别.图像搜索 2.获取Acc ...