文章目录

  • 表格
  • 实例
    • |
    • ^
    • $
    • \
      • 数字是1 ~ 99:
      • 数字是0:
    • […………]
    • {}
    • 贪婪模式匹配
    • 非贪婪模式匹配
    • \b
    • findall
      • 注意:
      • 实例1
      • 实例2
      • 实例3
      • 实例4
      • 如何消除findall这种返回方法

表格

字符 含义
. 表示匹配除了换行符外的任何字符;注:通过设置 re.DOTALL 标志可以使 . 匹配任何字符(包含换行符)
| A | B,表示匹配正则表达式 A 或者 B
^ 1. (脱字符)匹配输入字符串的开始位置;
2. 如果设置了 re.MULTILINE 标志,^ 也匹配换行符之后的位置
$ 1. 匹配输入字符串的结束位置,
2. 如果设置了 re.MULTILINE 标志,$ 也匹配换行符之前的位置
\ 1. 将一个普通字符变成特殊字符,例如 \d 表示匹配所有十进制数字,
2. 解除元字符的特殊功能,例如 . 表示匹配点号本身,
3. 引用序号对应的子组所匹配的字符串,
4. 详见下方列举
[...] 字符类,匹配所包含的任意一个字符:
注1:连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符;
注2:特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符。其它特殊字符如 *、+、? 等均作为普通字符匹配;
注3:脱字符 ^ 如果出现在首位则表示匹配不包含其中的任意字符;如果 ^ 出现在字符串中间就仅作为普通字符匹配
{M,N} M 和 N 均为非负整数,其中 M <= N,表示前边的 RE 匹配 M ~ N 次;注1:{M,} 表示至少匹配 M 次;注2:{,N} 等价于 {0,N};注3:{N} 表示需要匹配 N 次
* 匹配前面的子表达式零次或多次,等价于 {0,}
+ 匹配前面的子表达式一次或多次,等价于 {1,}
? 匹配前面的子表达式零次或一次,等价于 {0,1}
*?, +?, ?? 默认情况下 *、+ 和 ? 的匹配模式是贪婪模式(即会尽可能多地匹配符合规则的字符串);
*?+??? 表示启用对应的非贪婪模式。
举个栗子:对于字符串 "FishCCC",正则表达式 FishC+ 会匹配整个字符串,而 FishC+? 则匹配 "FishC"
{M,N}? 同上,启用非贪婪模式,即只匹配 M 次
(...) 匹配圆括号中的正则表达式,或者指定一个子组的开始和结束位置;注:子组的内容可以在匹配之后被 \数字 再次引用 ;举个栗子:(\w+) \1 可以字符串 “Fish Fish.com” 中的 “Fish Fish”(注意有空格)
(?...) (? 开头的表示为正则表达式的扩展语法(下边这些是 Python 支持的所有扩展语法);
(?aiLmsux) 1. (? 后可以紧跟着 ‘a’,‘i’,‘L’,‘m’,‘s’,'u''x' 中的一个或多个字符,只能在正则表达式的开头使用;
2. 每一个字符对应一种匹配标志:re-A(只匹配 ASCII 字符),re-I(忽略大小写),re-L(区域设置),re-M(多行模式), re-S(. 匹配任何符号),re-X(详细表达式),包含这些字符将会影响整个正则表达式的规则;
3. 当你不想通过 re.compile() 设置正则表达式标志,这种方法就非常有用啦.
注意,由于 (?x) 决定正则表达式如何被解析,所以它应该总是被放在最前边(最多允许前边有空白符)。如果 (?x) 的前边是非空白字符,那么 (?x) 就发挥不了作用了。
(?:...) 非捕获组,即该子组匹配的字符串无法从后边获取
(?P<name>...) 命名组,通过组的名字(name)即可访问到子组匹配的字符串
(?P=name) 反向引用一个命名组,它匹配指定命名组匹配的任何内容
(?#...) 注释,括号中的内容将被忽略
(?=...) 前向肯定断言。如果当前包含的正则表达式(这里以 … 表示)在当前位置成功匹配,则代表成功,否则失败。一旦该部分正则表达式被匹配引擎尝试过,就不会继续进行匹配了;剩下的模式在此断言开始的地方继续尝试。举个栗子:love(?=Fish) 只匹配后边紧跟着 “Fish” 的字符串 “love”
(?!...) 前向否定断言。这跟前向肯定断言相反(不匹配则表示成功,匹配表示失败);举个栗子:Fish(?!\.com) 只匹配后边不是 “.com” 的字符串 “Fish”
(?<=...) 后向肯定断言。跟前向肯定断言一样,只是方向相反。举个栗子:(?<=love)Fish 只匹配前边紧跟着 "love" 的字符串 "Fish"
(?<!...) 后向否定断言。跟前向肯定断言一样,只是方向相反。举个栗子:(?<!Fish)\.com 只匹配前边不是 "Fish" 的字符串 ".com"
(?(id/name)yes-pattern|no-pattern) 1. 如果子组的序号或名字存在的话,则尝试 yes-pattern 匹配模式;否则尝试 no-pattern 匹配模式2. no-pattern 是可选的,举个栗子:(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$) 是一个匹配邮件格式的正则表达式,可以匹配 <user@fishc.com>'user@fishc.com',但是不会匹配 '<user@fishc.com''user@fishc.com>'
\ 下边列举了由字符 '\' 和另一个字符组成的特殊含义。注意,'\' + 元字符的组合可以解除元字符的特殊功能
\序号 1. 引用序号对应的子组所匹配的字符串,子组的序号从 1 开始计算,2. 如果序号是以 0 开头,或者 3 个数字的长度。那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的 ASCII 码值对应的字符,举个栗子:(.+) \1 会匹配 “Fish Fish” 或 “55 55”,但不会匹配 "FishFish"(注意,因为子组后边还有一个空格)
\A 匹配输入字符串的开始位置
\Z 匹配输入字符串的结束位置
\b 匹配一个单词边界,单词被定义为 Unicode 的字母数字或下横线字符,举个栗子:\bFish\b 会匹配字符串 "love Fish""Fish.""(Fish)"
\B 匹配非单词边界,其实就是与 \b 相反,举个栗子:py\B 会匹配字符串 "python""py3""py2",但不会匹配 "py "、“py.” 或 “py!”
\d 1. 对于 Unicode(str 类型)模式:匹配任何一个数字,包括 [0-9] 和其他数字字符;如果开启了 re.ASCII 标志,就只匹配 [0-9];2. 对于 8 位(bytes 类型)模式:匹配 [0-9] 中任何一个数字
\D 匹配任何非 Unicode 的数字,其实就是与 \d 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^0-9]
\s 1. 对于 Unicode(str 类型)模式:匹配 Unicode 中的空白字符(包括 [ \t\n\r\f\v] 以及其他空白字符);如果开启了 re.ASCII 标志,就只匹配 [ \t\n\r\f\v];2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的空白字符,即 [ \t\n\r\f\v]
\S 匹配任何非 Unicode 中的空白字符,其实就是与 \s 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^ \t\n\r\f\v]
\w 1. 对于 Unicode(str 类型)模式:匹配任何 Unicode 的单词字符,基本上所有语言的字符都可以匹配,当然也包括数字和下横线;如果开启了 re.ASCII 标志,就只匹配 [a-zA-Z0-9_];2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的字母数字,即 [a-zA-Z0-9_]
\W 匹配任何非 Unicode 的单词字符,其实就是与 \w 相反;如果开启了 re.ASCII 标志,则相当于 [^a-zA-Z0-9_]
转义符号 正则表达式还支持大部分 Python 字符串的转义符号:\a,\b,\f,\n,\r,\t,\u,\U,\v,\x,\\ ;
注1:\b 通常用于匹配一个单词边界,只有在字符类中才表示“退格”;
注2;:\u\U 只有在 Unicode 模式下才会被识别;
注3:八进制转义(\数字)是有限制的,如果第一个数字是 0,或者如果有 3 个八进制数字,那么就被认为是八进制数;其他情况则被认为是子组引用;至于字符串,八进制转义总是最多只能是 3 个数字的长度

实例

|

re.search(r'dog(C|D)','dogC')
re.search(r'dog(C|D)','dogD')

^

必须以脱字符后面的字符为输入字符串的开始位置,才能匹配成功

re.search(r'^dog(C|D)','dogD')
re.search(r'^dog(C|D)','l like dogD')

$

必须以这个字符前面的字符为输入字符串的结束位置,才能匹配成功

re.search(r'dog(C|D)$','l like dogD')

\

解除元字符的特殊功能:\.匹配的就是一个.
\后面如果加数字的话,如果数字是1 ~ 99,那么它表示的引用序号对应的子组所匹配的字符串;如果跟着的数字是0或者是三位的数字,那么它是一个八进制数字,表示的是这个八进制数据所对应的ASCII码的字符

数字是1 ~ 99:

re.search(r'(dogD)\1','dogDdogD')


\1相当于dogD,因为这里1号子组就是dogD(用括号括了起来)

数字是0:

re.search(r'(dogD)\060','dogD0')
re.search(r'(dogD)\060','dogDdogDdogD')


切记是八进制!

re.search(r'(dogD)\141','dogDa')

[…………]

re.search(r'[.]','dogDa.txt')

re.search(r'\.','dogDa.txt')

re.findall(r'[a-z]','dogD.com')

re.findall(r'[\n]','dog.com\n')

最前面的脱字符(表示后面字符除外的字符):

re.findall(r'[^a-z]','PdogL.Zcom\n')


最后面的脱字符(表示匹配脱字符本身):

re.findall(r'[a-z^]','^PdogL.Zcom\n')

{}

re.search(r'dogD{3}','dogDDDD')

re.search(r'(dogD){3}','dogDdogDdogD')


注意:
正则表达式里面不能随意加空格。。

贪婪模式匹配

p='<html><title>l love dogD.com</title></html>'
re.search(r'<.+>',p)

非贪婪模式匹配

p='<html><title>l love dogD.com</title></html>'
re.search(r'<.+?>',p)

\b

re.findall(r'\bdogD\b','dogD.com!dogD_com(dogD)')



这里所匹配出来的是,
第一个:dogD.com前面这个dogD
第二个:(dogD)这个dogD
至于下横线这里,被认为连着一个单词,并不是单词边界(.()边界),

\t是TAB键,\n是换行键,\r是回车,\f表示换页,\v表示垂直的制表符

findall

注意:

如果给出的正则表达式包含子组的话,那么就会把子组的内容单独返回回来;如果存在多个子组,那么就会把匹配内容组合成元组的形式来进行返回

实例1

p=r'dogD(fish)'
html='dogDfishabcd'
iplist=re.findall(p,html)
iplist

实例2

p=r'dogD(fish)'
html='dogDfishfishfish'
iplist=re.findall(p,html)
iplist

实例3

 p=r'(dogD)(fish)'
html='dogDfishfishfish'
iplist=re.findall(p,html)
iplist

实例4

p=r'(([0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}([0,1]?\d?\d|2[0-4]\d|25[0-5])'
html='192.168.1.1 192.135.124.125 192.168.126.124'
re.findall(p,html)

如何消除findall这种返回方法

 p=r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])'html='192.168.1.1 192.135.124.125 192.168.126.124'
re.findall(p,html)

Python3 正则表达式特殊符号及用法(详细列表)相关推荐

  1. python语言所使用的特殊含义符号_Python3 正则表达式特殊符号及用法

    Python3 正则表达式特殊符号及用法(详细列表) 正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合.子组匹配.模式重 复次数.正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不 ...

  2. Python——正则表达式特殊符号及用法

    由于正则表达式的内容比较多,所以单独写成一系列文章,主要内容是根据小甲鱼所讲的内容综合一下正则表达式的笔记. 贴上小甲鱼的<Python3 如何优雅地使用正则表达式>系列可观看的博客地址: ...

  3. python3 正则匹配特殊符号_Python3 正则表达式特殊符号及用法(详细列表)

    字符含义 .表示匹配除了换行符外的任何字符注:通过设置 re.DOTALL 标志可以使.匹配任何字符(包含换行符) |A | B,表示匹配正则表达式 A 或者 B ^1. (脱字符)匹配输入字符串的开 ...

  4. Python3正则表达式(慢慢更新中~)

    说明:         在python中,先是正则基本理论和字符代表意思,接着是python3中re的实操正则模块 理论: 一.元字符 二.限定符 三.字符类 四.排除字符 五.选择字符 六.转义字符 ...

  5. Practical Python基础1(数据类型,运算,比较符号,字符串,列表,函数等)

    Practical Python基础1(数据类型,运算,比较符号,字符串,列表,函数等) Python是一种解释性的高级编程语言.它通常被归类为"脚本语言",被认为类似于Perl. ...

  6. python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解

    扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...

  7. 【MADDPG(MPE)——环境配置与用法详细介绍(多智能体强化学习))】

    MADDPG(MPE)--环境配置与用法详细介绍(多智能体强化学习) MADDPG(MPE) 介绍 MPE环境安装教程 前期准备 MPE 安装包介绍 MPE 安装环境要求 开始安装 环境测试 MPE环 ...

  8. Numpy用法详细总结:学习numpy如何使用,看这一篇文章就足够了

    Numpy用法详细总结 一.创建ndarray及查看数据类型 1. 使用np.array()由python list创建 图片与array数组的关系 2. 使用np的常用函数创建 二.ndarray的 ...

  9. top命令参数详解(linux top命令的用法详细详解)

    通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. top命令输出长这样: top命令参数详解(linux top命令的用法详细详解) 以下解析一下各个字段 ...

最新文章

  1. PMVS:多视图匹配经典算法
  2. 关于Arrays类总结
  3. 混合云部署MySQL集群_数据库混合云解决方案
  4. (一) 自带刷新的列表-LtRecyclerView v2.x版本(LtAdapter)(基本使用)
  5. Jenkins Gitee 实现持续集成CI/CD工具【免费、推荐】
  6. sqlserver 分组合并列_哪个“三人组”是历史最强组合?数据显示最均衡组合令人意外...
  7. 用正则表达式抽取文本
  8. 盘点实际项目应用中的最佳机器学习模型
  9. 简明Linux命令行笔记:locate
  10. 24. 使用GitHub
  11. php 判断微信浏览器支付宝,PHP判断是手机端-PC端-微信浏览器
  12. python中round的用法_python中round函数如何使用
  13. CSS的选择器(超详细!!)
  14. RevitAPI: 当前视图为透视图的时候IdlingEvent不会被触发
  15. 基于 RFID 与 ZigBee 智能汽车装配生产线车模追溯系统设计
  16. oracle通过DBlink连接神通数据库方法教程
  17. uniform对象及其使用
  18. Vue和elementUI常用组件问题
  19. .NetCore外国一些高质量博客分享
  20. linux下ifconfig命令找不到解决办法

热门文章

  1. 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
  2. DL之VGG16:基于VGG16迁移技术实现猫狗分类识别(图片数据量调整→保存h5模型)
  3. Py之albumentations:albumentations库函数的简介、安装、使用方法之详细攻略
  4. 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
  5. ML之FE:利用FE特征工程(单个特征及其与标签关系的可视化)对RentListingInquries(Kaggle竞赛)数据集实现房屋感兴趣程度的多分类预测
  6. 成功解决FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.
  7. Python运行异常 Original error was: DLL load failed:
  8. JAVA_OA管理系统(三):Spring参数注入
  9. JavaScript优化基本篇
  10. dropout+Batch Normalization理解