在《Python基础教程》的第198页上看到这样一句:

re.sub(emphasis_pattern, r'<em>\1</em>', 'Hello, *world*!')

其中:emphasis_pattern = r'\*([^\*]+)\*'

结果为:'Hello, <em>world</em>!'

对emphasis_pattern = r'\*([^\*]+)\*'

头尾的\*取消了元字符*,即只是作为普通字符

中间的()是一个子模式,字符串中与其匹配的子字符串可以用/1进行模式逆引用

[ ]+表示[ ]中的字符至少匹配一个

^\*表示匹配除了*号外的任何符号

与其匹配的例子:*abc*   (其中abc可以换成除*的任何字符)

对re.sub(emphasis_pattern, r'<em>\1</em>', 'Hello, *world*!')

调用函数sub(pat, repl. string)

首先要明白string是匹配pat的,函数的作用是将 匹配的部分用字符串repl替换掉:

如re.sub(r'a[abc]+d' , 'python' , 'hello,abcd')就是:'hello,python'

所以上面那个奇怪的东东其实就是用<em>\1</em>这个字符串来替换掉'Hello, *world*!'满足emphasis_pattern的部分而已(其实就是*world*)

那么\1是什么东西?

查了些资料,发现这个是re里面的子模式的逆向应用

\1代表的是'Hello, *world*!'匹配emphasis_pattern中( )里面的部分,也就是world

OK!现在就变成了:

re.sub( r'\*([^\*]+)\*', '<em>world</em>', 'Hello, *world*!')

用<em>world</em>替换掉 *world*,搞定

关于子模式和逆向引用:http://www.cnblogs.com/ylan2009/articles/2382870.html

通过理解这个正则语句,学到了不少

转载于:https://www.cnblogs.com/ylan2009/archive/2012/03/07/2382880.html

对一句正则表达式的理解相关推荐

  1. 生活感悟——我对三句话的理解

    生活感悟-我对三句话的理解 brycezou@163.com 1.不要试图从一开始就建立一个完美的数据仓库 说这句话是有前提的,那就是充分结合当前的业务和短期将来的业务,建立一个适用于现在和短期将来的 ...

  2. 请谈谈你对这句话的理解:“所见的是暂时的,所不见的是永远的”5.3 先来先服务调度算法为什么苏联解体的时候,戈尔巴乔夫演讲的当时,电视的所有频道都在放《天鹅湖》介绍一下LSTM文本生成模型

    目录 请谈谈你对这句话的理解:"所见的是暂时的,所不见的是永远的" 5.3 先来先服务调度算法 为什么苏联解体的时候,戈尔巴乔夫演讲的当时,电视的所有频道都在放<天鹅湖> ...

  3. Android Q中外部存储盘路径正则表达式的理解

    Android Q的ModernMediaScanner.java文件中以下两个正则表达式,具体该怎么解读? private static final Pattern PATTERN_VISIBLE ...

  4. JavaScript 正则表达式相关理解

    1.使用正则的test.exec方法而且带有g属性进行连续匹配的时候, 如果每次匹配之前 lastIndex属性没有清零. <script>var str='123qweQWE125|2q ...

  5. Java正则表达式之“\\“理解

    相信很多人在使用正则表达式的时候都会遇到如下的语句: ​​​​​​​ 通过查阅正则表达式的API文档可以了解到正则表达式的语法知识: 很多小伙伴就会产生疑问为什么语法是"\d"(或 ...

  6. Python菜鸟小萌新对正则表达式的理解

    正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个 ...

  7. 几句话直观理解java中Scanner类的next()、nextLine()、nextInt()

    很多关于上述几个方法的介绍都非常晦涩,很复杂,我们在处理相关问题时只需要记住以下规律即可: (1)Scanner是一个扫描器,对于键盘输入或者文件中的数据,先存到缓存区等待读取,它判断读取结束的标示是 ...

  8. 中文分词word2vec和doc2vec句向量的理解

    ** Doc2vec ** 1.Word2vec和Doc2vec做Word Embedding和Sentence/Document EMbedding. 2.NLP中最直观常用的一种词表示方法是one ...

  9. 理解Javascript的正则表达式

    前言 本文4089字,阅读大约需要12分钟. 总括: 本文基于Javascript的正则表达式,结合笔者个人的思考来对正则表达式的特性进行讲解. 参考文章:A Practical Guide to R ...

最新文章

  1. JS String类型整理
  2. Mint-ui框架Index List 的应用,以及高度的适配问题
  3. mysql总结 博客园_mysql 总结
  4. python爬微信头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法
  5. MOQL--操作数(Operand) (一)
  6. springMVC+hibernate + layui分页
  7. 光流(三)--LK算法改进(金字塔LK)
  8. iphone开发常用代码
  9. 处理linux centos7中登陆plsql后退格键上下键使用乱码问题
  10. POJ 1625 Censored! (AC自己主动机 + 高精度 + DP)
  11. 简易 shell 爬搜狐
  12. 阿里云centos7部署:nginx+uwsgi+django+vue
  13. MySQL日期差,时间差,使用DATEDIFF、TIMESTAMPDIFF函数
  14. 十进制数转化为任意进制数n,采用变量N、数组A[]进行存储两种算法实例
  15. 什么是 bigkey?
  16. 生成LaTeX使用的eps格式图片
  17. 适合安装语音报警器的地方有哪些
  18. presto国产化适配-aarch64
  19. IOS 自定义复选框
  20. CT 系统参数标定及反投影重建成像-2017数模国赛论文A298编程分析

热门文章

  1. LeetCode 992. K 个不同整数的子数组(双指针)
  2. LeetCode MySQL 1149. 文章浏览 II
  3. 程序员面试金典 - 面试题 08.07. 无重复字符串的排列组合(回溯)
  4. LeetCode 771. 宝石与石头(哈希)
  5. 使用c++查看linux服务器某个进程正在使用的内存_Linux 系统管理
  6. MySQL如何跨机器迁移数据?
  7. thinkphp用来做什么项目_thinkphp第1课:使用thinkphp创建一个项目
  8. Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Apollo
  9. 论文浅尝 \ 联合知识图谱实例和本体概念的通用表示学习
  10. Python字符串模糊匹配库FuzzyWuzzy