Python学习手册之字符类和元字符深入
在上一篇文章中,我们介绍了 Python 的正则表达式和元字符,现在我们介绍 Python 的字符类和对元字符进行深入讲解。
查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10027947.html
字符类
字符类提供了一种只匹配特定字符集中的一个字符的方法。字符类通过方括号把一列字符或一个范围括在一起。
import re string1 = "python"
string2 = "eggs"
string3 = "hello"
pattern = r"[mnopq]" search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3) if search1:
print(search1.group())
print("search 1") if search2:
print(search2.group())
print("search 2") if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
p
search 1
o
search 3
>>>
匹配模式 [mnopq] 在 search 函数中匹配字符串包含的其中任何一个字符。
字符类可以匹配字符范围:
[a-z] 匹配任何小写字母。
[M-Q] 匹配任何大写字母从 M 到 Q。
[0-9] 匹配数字。
可以在一个类中包含多个范围。例如,[A-Za-z] 匹配任何情况下的一个字符。
import re string1 = "python5"
string2 = "Aggs1"
string3 = "hello"
pattern = r"[a-z][a-z][0-9]" search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3) if search1:
print(search1.group())
print("search 1") if search2:
print(search2.group())
print("search 2") if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
on5
search 1
gs1
search 2
>>>
上面示例中的正则模式匹配包含两个小写字母然后跟着一个数字的字符串。
在字符类的开头有 ^ 表示匹配非字符类,也就是它与包含的字符之外的任何字符匹配。
有些元字符 (如 $ 和 .) 在字符类中没有任何意义,元字符 ^ 同样没有任何意义,除非它是字符类中的第一个字符。
import re string1 = "This is Python3.7"
string2 = "abc123"
string3 = "hello"
pattern = r"[^a-z]" search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3) if search1:
print(search1.group())
print("search 1") if search2:
print(search2.group())
print("search 2") if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
T
search 1
1
search 2
>>>
匹配模式 [^a-z] 用于排除小写字符串。注意,^ 应该位于括号内,表示非此字符类。
元字符深入
有些比较特殊的元字符是 *, +, ?, { 和 },它们用来指定重复的次数。
元字符 * 叫通配符,是匹配范围最广的模式之一,因为它可以匹配零个或多个任意字符 (除了换行符:
\r 和 \n),并且它总是尝试尽可能多的匹配,匹配可以是一个字符、一个类或括号中的一组字符。
import re string1 = "python"
string2 = "abc123"
string3 = "pythonabc"
pattern = r"python(abc)*" search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3) if search1:
print(search1.group())
print("search 1") if search2:
print(search2.group())
print("search 2") if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
python
search 1
pythonabc
search 3
>>>
上面的示例匹配以 python 开头的字符串后面跟随零个或多个 abc 的字符串。
总是尝试匹配尽可能多的模式叫做贪心模式。
元字符 + 与 * 非常相似,只不过它的意思是一个或多个重复,而不是零或多个重复。
import re string1 = "pyt"
string2 = "abc123"
string3 = "pythonabc"
pattern = r"pyt+" search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3) if search1:
print(search1.group())
print("search 1") if search2:
print(search2.group())
print("search 2") if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
pyt
search 1
pyt
search 3
>>>
* 匹配前面表达式的 0 次或很多次。 + 匹配前面表达式的 1 次或很多次。
元字符问号 ? 匹配零或一个前面的重复。
import re string1 = "pyt-hon"
string2 = "abc123"
string3 = "pythonabc"
pattern = r"pyt(-)?hon" search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3) if search1:
print(search1.group())
print("search 1") if search2:
print(search2.group())
print("search 2") if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
pyt-hon
search 1
python
search 3
>>>
花括号
花括号可以用来表示两个数字之间的重复次数。表达式 {x,y} 表示匹配出现次数介于 x 和 y 的前面的字符。因此 {0,1} 和 ? 意思相同。
如果不写第一个数字,它将默认为零。如果不写第二个数字,它被认为是可以匹配很多次。
import re
pattern = r"6{1,2}$"
string1 = ""
string2 = ""
string3 = ""
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
66
search 2
6
search 3
>>>
6{1,2}$ 匹配字符串含有 1 次到 2 次的 6。
注意:在 Python 里指定的数字必须小于 4294967295 且第一个必须小于等于第二个。
“You can neither win nor lose if you don't run the race..”
“如果你都不敢站在跑道上,何谈输赢。” -- 大卫·鲍伊
Python学习手册之字符类和元字符深入的更多相关文章
- 《Python学习手册》读书笔记
之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我 ...
- 《Python学习手册》读书笔记【转载】
转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉 ...
- Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘
Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...
- Python学习手册(第4版)PDF高清完整版免费下载|百度云盘
Python学习手册(第4版)PDF高清完整版免费下载|百度云盘 提取码:z6il 内容简介 Google和YouTube由于Python的高可适应性.易于维护以及适合于快速开发而采用它.如果你想要编 ...
- [python学习手册-笔记]002.python核心数据类型
python核心数据类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...
- [python学习手册-笔记]003.数值类型
003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...
- 参考学习《Python学习手册(第4版)》高清中文PDF+高清英文PDF+源代码
看到第38章了,整体感觉解释详细,例子丰富:关于Python语言本身的讲解全面详尽而又循序渐进不断重复,同时详述语言现象背后的机制和原理:除语言本身,还包含编程实践和设计以及高级主题.边看边写代码.不 ...
- 读书分享全网学习资源大合集,推荐Python学习手册等三本书「01」
0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code之 ...
- 《Python学习手册 第五版》 -第13章 while循环和for循环
上一章已经讲过if条件语句,这章重点是循环语句:while.for 本章的重点内容 1.while循环 1)一般形式 2)break.continue.pass和循环的else 2.for循环 1)一 ...
随机推荐
- .net 面向对象程序设计深入](3)UML
1.活动图简介 定义:是阐明了业务用例实现的工作流程. 业务工作流程说明了业务为向所服务的业务主角提供其所需的价值而必须完成的工作. 业务用例由一系列活动组成,它们共同为业务主角生成某些工件. 工作流 ...
- 用CSS写扫描二维码图标
代码如下: <style>.icon{margin:300px;width:30px;height:30px;position:relative}.icon .b{border:2px s ...
- TortoiseGit基本操作
使用之前需要下载git for windows,tortoisegit . 1.TortoiseGit使用与操作 1.1克隆 打开一个要存放项目的文件夹下,右键Git Clone...进行克隆 弹出克 ...
- python UI自动化实战记录四:测试页面1-pageobject
该部分记录测试页面1-IndexPage,所有首页上的元素定位.操作.获取属性等方法都写在该类中. 1 首页类继承自BasePage 2 首页类第一部分写的是所有的定位器 3 首页类第二部分类的方法, ...
- (二)给Centos配置网络以及使用xshell远程连接Centos
好吧,我对网络协议以及ip配置知识的匮乏,让我在这里折腾了将近一天才搞定.可以说基本上网上遇到的问题我都遇到了.在这里,记下正确的步骤来给Centos配置网络.希望以后少走弯路. 首先我要说明的是,我 ...
- 整理了一下关于KVO的姿势
http://www.jianshu.com/p/d104daf7a062 1) + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)th ...
- perl学习---控制:unless,until,next,redo,last
1.1.unless unless 的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_]\w*$/i){ print “The value of ...
- PHP------TP控制器
TP控制器 打开 Home文件夹: 如果不想使用Index控制器,想新建一个自己使用的控制器,就可以在Controller文件夹下,新建一个文件(这个文件的命名规则,要按照控制器的命名规则来.第一个 ...
- 15、SpringBoot-CRUD错误处理机制(2)
二.如何定制错误响应 1).如何定义错误处理页面 1.1.有模板引擎的情况下:error/状态码; [将错误页面命名为 错误状态码.html 放在模板引擎文件夹里面的error文件夹下 ...
- HDU 1284 钱币兑换问题(普通型 数量无限的母函数)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1284 钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) ...