正则指引第一章学习笔记

本贴最后更新于 4301 天前,其中的信息可能已经时移俗易

第一章讲的是字符组(Character Class)。
在正则表达式中,它表示"在同一个位置可能出现的各种字符",其写法是在一对方括号[和]之间列出所有可能出现的字符,简单的字符组比如[ab]、[314]、[#.?]
需要注意的地方有
1)-范围表示法的要按ASCII顺序写, [0-9]是合法的,[9-0]会报错

In [1]: import re

In [2]: re.search("^[0-9]$", "2") != None
Out[2]: True

In [3]: re.search("^[9-0]$", "2") != None

error Traceback (most recent call last)
Traceback (most recent call last):
error: bad character range

2)匹配数字和字母不要用[0-z],因为这个范围包括很多标点符号,最好写成[0-9a-zA-Z]

In [4]: re.search("^[0-z]$", "A") != None
Out[4]: True

In [5]: re.search("^[0-z]$", ":") != None
Out[5]: True

3)元字符做为普通字符使用时需要转义,在python代码中,普通字符串的转义需要加两个"\",原生字符串需要一个"\" 推荐使用原生字符串

 

#原生字符串和字符串的等价  
In [6]: r"^[0\-9]$" == "^[0\\-9]$"
Out[6]: True
#原生字符串的转义要简单许多  
In [7]: re.search(r"^[0\-9]$", "3") != None
Out[7]: False
In [8]: re.search(r"^[0\-9]$", "-") != None
Out[8]: True

4)]出现在不同位置,含义不同,正则表达式将]与前面最近的[匹配

#未转义的]  
In [9]: re.search(r"^[012]345]$", "2345") != None
Out[9]: False

In [10]: re.search(r"^[012]345]$", "2345]") != None
Out[10]: True

In [11]: re.search(r"^[012]345]$", "5") != None
Out[11]: False

In [12]: re.search(r"^[012]345]$", "]") != None
Out[12]: False
#转义的]
In [13]: re.search(r"^[012]345]$", "2345") != None
Out[13]: False

In [14]: re.search(r"^[012]345]$", "5") != None
Out[14]: True

In [15]: re.search(r"^[012]345]$", "]") != None
Out[15]: True

 

5)字符组简记法

常见的字符组简记法有\d、\w、\s。从表面上看,它们与[…]完全没联系,其实是一致的。其中\d等价于[0-9],其中的d代表"数字(digit)"; \w等价于[0-9a-zA-Z_],其中的w代表"单词字符(word)";\s等价于[ \t\r\n\v\f](第一个字符是空格),s表示"空白字符(space)"。

re.search(r"^\d$", "8") != None      #  => True  
re.search(r"^\d$", "a") != None      #  => False

re.search(r"^\w$", "8") != None # => True
re.search(r"^\w$", "a") != None # => True
re.search(r"^\w$", "_") != None # => True

re.search(r"^\s$", " ") != None # => True
re.search(r"^\s$", "\t") != None # => True
re.search(r"^\s$", "\n") != None # => True



6)相对于\d、\w和\s这三个普通字符组简记法,正则表达式也提供了对应排除型字符组的简记法:\D、\W和\S--字母完全一样,只是改为大写。这些简记法匹配的字符互补:\s能匹配的字符,\S一定不能匹配;\w能匹配的字符,\W一定不能匹配;\d能匹配的字符,\D一定不能匹配。例1-19示范了这几个字符组简记法的应用。

#\d和\D  
re.search(r"^\d$", "8") != None     #  => True  
re.search(r"^\d$", "a") != None     #  => False  
re.search(r"^\D$", "8") != None     #  => False  
re.search(r"^\D$", "a") != None     #  => True  
#\w和\W  
re.search(r"^\w$", "c") != None     #  => True  
re.search(r"^\w$", "!") != None     #  => False  
re.search(r"^\W$", "c") != None     #  => False  
re.search(r"^\W$", "!") != None     #  => True  
#\s和\S  
re.search(r"^\s$", "\t") != None    #  => True  
re.search(r"^\s$", "0") != None         #  => False  
re.search(r"^\S$", "\t") != None    #  => False  
re.search(r"^\S$", "0") != None         #  => True  
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 674 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖 • 1 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 487 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 7 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 55 关注
  • abitmean

    有点意思就行了

    30 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 546 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 804 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 1 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖 • 1 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 617 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 735 关注
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 319 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 4 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 7 关注