python 正则表达式

本贴最后更新于 956 天前,其中的信息可能已经斗转星移
"""
正则表达式
"""
"""
re.match 函数
原形:match(pattern, string, flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,值如下:
re.I    忽略大小写
re.L    做本地户识别
re.M    多行匹配,影响^和¥
re.S    是.匹配包括换行符在内的所有字符
re.U    根据Unicode字符集解析字符,影响\W   \w  \B  \b
re.X    使我们以更灵活的格式理解正则表达式
参数:
功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,返回None
"""
# www.baidu.com
import re

a = re.match('www', 'www.baidu.com')
print(re.match('www', 'www.baidu.com'))  # <re.Match object; span=(0, 3), match='www'>
print(re.match('www', 'ww.baidu.com'))  # None
print(re.match('www', 'baidu.wwwcom'))  # None
print(re.match('www', 'wwW.baidu.com'))  # None
print(re.match('www', 'wwW.baidu.com', flags=re.I))  # <re.Match object; span=(0, 3), match='wwW'>
print(a.span())  # (0, 3)
print('------------------------------------------------------------------------------')

# 扫描整个字符串,返回从起始位置成功的匹配
"""
re.search()函数
原形:search(pattern, string, flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,值如下:
功能:扫描整个字符串,并返回第一个成功的匹配
"""
print(re.search('sunck', 'good man is sunck!sunck is nice'))  # <re.Match object; span=(12, 17), match='sunck'>

"""
re.findall()函数
原形:findall(pattern, string, flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,值如下:
功能:扫描整个字符串,并返回第一个成功的匹配
"""
print(re.findall('sunck', 'good man is sunck!sunck is nice'))  # ['sunck', 'sunck']

print('----------------------------------匹配单个字符与数字-----------------------------------')
"""
r
.               匹配除换行符以外的任意字符
[0123456789]    匹配单个数字,[]是字符集合,表示匹配方括号中所包含的任意一个字符
[sunck]         匹配's' ‘u' 'n' 'c' 'k'中任意一个字符
[a-z]           匹配任意小写字母
[A-Z]           匹配任意大写字母
[0-9]           匹配任意数字
[0-9a-zA-Z]     匹配任意字母和数字
[0-9a-zA-Z_]    匹配任意字母和数字和下划线
[^sunck]        匹配除了's' 'u' 'n' 'c' 'k'这几个字母以外的所有字符,中括号的^称为脱字符,表示不匹配集合中的字符
[^0-9]          匹配所有的非数字字符
\d              匹配数字,效果通[0-9]
\D              匹配非数字字符,效果同[^0-9]
\w              匹配数字、字母和下划线,效果同[0-9a-zA-Z_]
\W              匹配非数字,字母和下划线,效果同[^0-9a-zA-Z_]
\s              匹配任意的空白字符(空格、回车、换页、制表符、)[ \f\n\t\r]
\S              匹配任意的非空白符[^ \f\n\t\r]

"""
print(re.search('.', 'sunck is a good man'))  # <re.Match object; span=(0, 1), match='s'>
print(re.search('[0123456789]', 'sunck is a good man 6'))  # <re.Match object; span=(20, 21), match='6'>
print(re.findall('.', '.abc.s/dedf$%Ew-ty#@!*()'))      # ['.', 'a', 'b', 'c', '.', 's', '/', 'd', 'e', 'd', 'f', '$', '%', 'E', 'w', '-', 't', 'y', '#', '@', '!', '*', '(', ')']

print('----------------------------------锚字符(边界字符)-----------------------------------')
"""
^               行首匹配,和在[]里的^不是一个意思
$               行尾匹配
\A              匹配字符串开始,它和^的区别是,\A只匹配整个字符串的开头,即使在re.Mm模式下也不会匹配其他行的行首
\Z              匹配字符串结束,它和$的区别是,\Z只匹配整个字符串的结束,即使在re.Mm模式下也不会匹配其他行的行尾
\b              匹配一个单词的边界,也就是指单词和空格间的位置
\B              匹配非单词的边界
"""
b = re.search('boy$', 'sunck is a good boy')
print(re.search('^sunck', 'sunck is a good boy'))   # <re.Match object; span=(0, 5), match='sunck'>
print(re.search('^sunck$', 'sunck is a good boy'))  # None
print(re.search('boy$', 'sunck is a good boy'))     # <re.Match object; span=(16, 19), match='boy'>
print(b.span())                                     # (16, 19)
print(re.findall('^sunck', 'sunck is a good boy\nsunck is a bad man',re.M)) # ['sunck', 'sunck']
print(re.findall('\Asunck', 'sunck is a good boy\nsunck is a bad man'))     # ['sunck']

print(re.search(r'er\b','server is server '))
print('----------------------------------匹配多个字符-----------------------------------')
"""
说明:下方的x,y,z均为假设的普通字符吗,不是正则表达式的元字符

(xyz)           匹配小括号内的xyz(作为一个整体去匹配)
x?              匹配0个或者1个x,非贪婪匹配(尽可能少的匹配)
x*              匹配0个或者多个x,贪婪匹配(尽可能多的匹配)
.*              匹配0个或者任意多个字符(换行符除外)
x+              匹配至少一个x,贪婪匹配
x{n}            匹配确定的n个x(n是一个非负整数)
x{n,}           匹配至少n个x
x{n,m}          匹配至少n个x,最多m个x,n<=m
x|y             匹配x或y,|表示或
"""
print(re.findall(r'(sunck)','sunckgood is a godo man,sunck is a boy')) # ['sunck', 'sunck']
print(re.findall(r'(.*)','sunckgood is a godo man,sunck is a boy'))
print(re.findall(r'(a.*)','aaaaaabaacaaaa'))
print(re.findall(r'(a*)','aaaaaabaacaaaa'))
print(re.findall(r'(a+)','aaaaaabaacaaaa'))
print(re.findall((r'a{2}'),'aaaaaabaacaaaa'))
print(re.findall((r'a{3,}'),'aaaaaabaacaaaa'))
print(re.findall((r'a{3,6}'),'aaaaaabaacaaaa'))
print(re.findall(r'((s|S)unck)','sunck is Sunck'))
print(re.findall(r'(^sunckgood is a godo man,sunck is a boy.*)$','sunckgood is a godo man,sunck is a boy'))
print('----------------------------------特殊-----------------------------------')
"""
说明:下方的x,y,z均为假设的普通字符吗,不是正则表达式的元字符

x?  +?  *?  最小匹配,通常都是尽可能多的匹配,可以使用这种方式来解决贪婪匹配

"""
# /* part1 */ /* part2 */
print(re.findall(r'(//*.*/*/)','/* part1 */ /* part2 */'))      # ['/* part1 */ /* part2 */']
print(re.findall(r'(//*.*?/*/)','/* part1 */ /* part2 */'))     # ['/* part1 */', '/* part2 */']
  • Python

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

    543 引用 • 672 回帖
  • 正则表达式

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

    31 引用 • 94 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    176 引用 • 815 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 552 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖 • 1 关注
  • OpenStack

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

    10 引用 • 4 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    286 引用 • 729 回帖
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1792 回帖
  • 996
    13 引用 • 200 回帖 • 6 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 585 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    6 引用 • 38 回帖
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 1 关注
  • SendCloud

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

    2 引用 • 8 回帖 • 483 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 211 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 167 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖 • 1 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    567 引用 • 3532 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    408 引用 • 3574 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 453 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 72 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    166 引用 • 595 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1387 回帖 • 284 关注
  • ZooKeeper

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

    59 引用 • 29 回帖 • 4 关注
  • Laravel

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

    20 引用 • 23 回帖 • 721 关注