在上一篇文章中,我们介绍了 Python 的数据封装、类方法、静态方法和属性函数,现在我们介绍 Python 的正则表达式和元字符。查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10019973.html

正则表达式
正则表达式是一种强大的字符串操作工具。它是一种领域特定语言 (DSL),不管是 Python 还是在大多数现代编程语言中都是作为库存在。
它们主要面向两种任务:
- 验证字符串是否与模式匹配 (例如,字符串具有电子邮件地址的格式)。
- 在字符串中执行替换(例如将所有大写字母改成小写字母)。

  1. 特定于领域的语言是高度专业化的迷你编程语言。
  2. 正则表达式是一个例子,SQL(用于数据库操作)是另一个例子。
  3. 私有领域特定语言通常用于特定的工业目的。

Python 的正则表达式可以使用 re 模块访问,re 模块是标准库的一部分。
当你定义一个正则表达式,可以使用 re.match 函数用于确定是否匹配字符串的开始部分。如果匹配则 match 函数返回表示匹配的对象,如果不匹配则返回 None。
为了避免在处理正则表达式时出现混淆,我们将 r 添加到字符串前缀。该字符串不需要转义任何东西,使得正则表达式的使用变得更容易。

  1. from re import match
  2.  
  3. msg = r"super"
  4.  
  5. if match(msg,"superman!"):
  6. print("You are True")
  7.  
  8. else:
  9. print("Occur an error! Foolish...")

运行结果:

  1. >>>
  2. You are True
  3. >>>

上面的例子检查模式 super 是否匹配字符串,如果匹配,则打印 You are True。

  1. 这里的模式是一种简单的单词,但是有些字符串,在正则表达式中使用它们时会有特殊的意义。

匹配模式的其他函数有 re.matchre.findall
re.match 在字符串中找到匹配。
re.findall 返回一个包含匹配的列表。

  1. import re
  2.  
  3. string = "Hello python!Hello python!Hello python!"
  4. pattern = r".python."
  5.  
  6. print(re.match(pattern,string))
  7. print(re.findall(pattern,string))

运行结果:

  1. >>>
  2. None
  3. [' python!', ' python!', ' python!']
  4. >>>

从上面的示例中,我们可以得出:
match() 函数是从内容的第一个字符开始匹配,如果匹配不到,就得到None
findall() 函数从全部内容匹配,如果有多个,找出所有匹配的

  1. 函数 re.finditer 执行与 re.findall 相同的操作,但它返回一个迭代器,而不是一个列表。

正则表达式的 search 函数返回一个对象,包含几个更详细的信息。
此方法包括返回字符串匹配的值,返回第一次匹配的开始和结束位置,以及以元组形式返回第一个匹配的开始和结束位置的 span 函数。

  1. import re
  2. string = "Hello python!Hello python!Hello python!"
  3. pattern = r".python."
  4.  
  5. match = re.search(pattern,string)
  6. if match:
  7. print(match.group())
  8. print(match.start())
  9. print(match.end())
  10. print(match.span())

运行结果:

  1. >>>
  2. python!
  3. 5
  4. 13
  5. (5, 13)
  6. >>>

查找和替换
sub 是正则表达式里非常重要的函数。表达式:

  1. re.sub(pattern, repl, string, count=0, flags=0)

pattern:表示正则表达式中的模式字符串;
repl:被替换的字符串(既可以是字符串,也可以是函数);
string:要被处理的,要被替换的字符串;
count:匹配的次数, 默认是全部替换
flags:具体用处不详

  1. import re
  2. string = "Hello python!Hello python!Hello python!"
  3. pattern = r"python"
  4.  
  5. newstr = re.sub(pattern,"Java",string)
  6. print(newstr)

运行结果:

  1. >>>
  2. Hello Java!Hello Java!Hello Java!
  3. >>>

元字符
元字符使正则表达式比普通字符串方法更强大。它们允许您创建正则表达式来表示诸如一个或多个数字的匹配。
如果要创建与元字符 (如 $) 匹配的正则表达式,元字符的存在就会产生问题。您可以通过在元字符前面添加反斜杠来转义元字符。
但是这可能会导致问题,因为反斜杠在普通 Python 字符串中也有转义函数。这可能意味着可能将三个或四个反斜杠排成一行来执行所有转义操作。

  1. 为了避免这种情况,您可以使用一个原始字符串,它是一个普通字符串,前面有一个 "r" 前缀。

元字符点,用来表示匹配除了换行外的任何字符。

  1. import re
  2. string1 = "Hello python!Hello python!Hello python!"
  3. string2 = "pythan,1234587pythoi"
  4. string3 = r"hello"
  5. pattern = r"pyth.n"
  6.  
  7. match1 = re.search(pattern,string1)
  8. match2 = re.search(pattern,string2)
  9. match3 = re.search(pattern,string3)
  10. if match1:
  11. print(match1.group())
  12. print("match 1")
  13.  
  14. if match2:
  15. print(match1.group())
  16. print("match 2")
  17.  
  18. if match3:
  19. print(match3.group())
  20. print("match 3")

运行结果:

  1. >>>
  2. python
  3. match 1
  4. python
  5. match 2
  6. >>>

^ 表示匹配开始,$ 表示匹配结束。

  1. import re
  2. string1="python"
  3. string2="pythan,1234587pythoi"
  4. string3="hello"
  5. pattern=r"^pyth.n$"
  6.  
  7. match1 = re.search(pattern,string1)
  8. match2 = re.search(pattern,string2)
  9. match3 = re.search(pattern,string3)
  10. if match1:
  11. print(match1.group())
  12. print("match 1")
  13.  
  14. if match2:
  15. print(match1.group())
  16. print("match 2")
  17.  
  18. if match3:
  19. print(match3.group())
  20. print("match 3")

运行结果:

  1. >>>
  2. python
  3. match 1
  4. >>>
  1. 匹配模式 "^pyth.n$" 意味着字符串应该以 pyth 开头,然后是一个除换行符以外的任何字符,并以 n 结尾。

“We go through life. We shed our skins. We become ourselves.”

“我们经历人生,我们脱胎换骨。我们称为自己” -- 帕蒂·史密斯

Python学习手册之正则表达式和元字符的更多相关文章

  1. Python学习手册之正则表达式示例--邮箱地址提取

    在上一篇文章中,我们介绍了 Python 的捕获组和特殊匹配字符串,现在我们介绍 Python 的正则表达式使用示例.查看上一篇文章请点击:https://www.cnblogs.com/dustma ...

  2. 《Python学习手册》读书笔记

    之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我 ...

  3. 《Python学习手册》读书笔记【转载】

    转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉 ...

  4. 转载-《Python学习手册》读书笔记

    转载-<Python学习手册>读书笔记 http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html

  5. global语句(python学习手册422页)

    # -*- coding: cp936 -*- #python 27 #xiaodeng #global语句(python学习手册422页) #实际上就是一个名为__builtin__的模块,但是必须 ...

  6. 《Python学习手册》(二)

    <Python学习手册>(二) --类型和运算 数字 十六进制 八进制 二进制 0x 0o 0b hex() oct() bin() >>>int('10',2) 2 & ...

  7. 参考学习《Python学习手册(第4版)》高清中文PDF+高清英文PDF+源代码

    看到第38章了,整体感觉解释详细,例子丰富:关于Python语言本身的讲解全面详尽而又循序渐进不断重复,同时详述语言现象背后的机制和原理:除语言本身,还包含编程实践和设计以及高级主题.边看边写代码.不 ...

  8. 读书分享全网学习资源大合集,推荐Python学习手册等三本书「01」

    0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code之 ...

  9. 《Python学习手册 第五版》 -第13章 while循环和for循环

    上一章已经讲过if条件语句,这章重点是循环语句:while.for 本章的重点内容 1.while循环 1)一般形式 2)break.continue.pass和循环的else 2.for循环 1)一 ...

随机推荐

  1. Java接口与多态

    接口 可以理解为一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成 接口的定义格式 接口的数据成员,只允许被public, static, final修饰. 接口的方 ...

  2. linux下安装及配置jenkins

    jenkins常用的有两种安装方式: 1.直接下载war包jenkins.war,下载地址https://jenkins.io/download 直接下载 1.1.可以把war包直接部署到servle ...

  3. 最新-Linux常用命令大全-随时更新

      一.系统管理与设置 1.信息显示命令 # man & info  //帮助手册 # man 命令 //显示相应命令的帮助内容 # arch  //显示当前系统体系结构 # cal  //显 ...

  4. VS断点不生效

    工程属性页中“配置属性”->“C/C++”->“常规”->“调试信息格式”,选择“用于“编辑并继承”的程序数据库(/ZI)”. 在“配置属性”->“链接器”->“调试”- ...

  5. phoneGap的Android下编写phonegap 插件

    一. javascript 端的编写  第一个参数 成功的回调函数 第二个参数 失败的回调函数 第三个参数 是插件的类名称,也就是后台java文件的类名 第四个参数 执行的 action 名称     ...

  6. Java实现身份证号码验证源码分享

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  7. 关于Jsp页面的jstl标签的级联属性的异常。

    使用SpringMVC框架时,当我做表单回显时. 情景描述.Employee 类有一个Department类的属性.这两个类存在多对一关联关系. 下面是Employee类的属性的定义. public ...

  8. codeforces 814D An overnight dance in discotheque

    题目链接 正解:贪心. 首先我们可以计算出每个圆被多少个圆覆盖. 很显然,最外面的圆是肯定要加上的. 然后第二层的圆也是要加上的.那么第三层就不可能被加上了.同理,第四层的圆又一定会被加上. 然后我们 ...

  9. PHP 生成全局唯一id

    直接上代码: function generate_global_uniqid() { $prefix = md5(microtime(true)); // 生成唯一ID发生器 prefix,如果为服务 ...

  10. Vue通过input筛选数据

    <div id="app"> <input v-model='search' /> <ul> <li v-for="item i ...