Python其实很简单第十一章正则表达式
正则表达式是一个特殊的字符序列,它用来检查一个字符串是否与某种模式匹配。正则表达式在编译程序中至关重要,但并不是每个人都需要特别深入的学习和掌握。在此,只介绍一些最基本的应用。
1、元字符
元字符是构成正则表达式的一些特殊字符。在正则表达式中,元字符被赋予了新的含义。
下面介绍一些常用的元字符及其含义:
. 匹配除换行符以外的任意字符。
w 匹配字母、数字、下划线或汉字。
W 匹配w所匹配的字符以外的字符。
s 匹配单个空白符(包括Tab键和换行符)。
S 匹配除s匹配的字符以外的字符。
d 匹配数字。
b 匹配单词的分界符,如:空格、标点符号或换行符。
^ 匹配字符串的开始
$ 匹配字符串的结束
2、限定符
限定符是在正则表达式中用来指定数量的字符。常用的限定符有:
? 匹配前面的字符0或1次。如:zo?m可以匹配zom和zm,但不能匹配 zoom
+ 匹配前面的字符1或n次。如:zo?m可以匹配zom和zoom,但不能匹配zm
* 匹配前面的字符0或n次。如:zo?m可以匹配zom、zoom和zm
{n} 匹配前面的字符n次。如:zo{2}m可以匹配zoom,但不能匹配zom和zm
{n,} 匹配前面的字符至少n次。如:zo{1,}m可以匹配zom和zoom,但不能匹配zm
{n,m} 匹配前面的字符至少n次,最多m次。如:zo{1,2}m可以匹配zom和zoom,但不能匹配zm
3、方括号"[ ]"的用途
方括号"[ ]"里可以列出某个字符范围。如:[aeiou]表示匹配任意一个元音字母,[zqsl]表示匹配姓氏"赵钱孙李"的拼音第一个字母。
4、排除字符
方括号"[ ]"中的"^"字符表示排除的意思,如:[^aeiou]表示匹配任意一个非元音字母的字符。
5、选择字符
字符"|"相当于"或"。如:(^d{3}[-]d{8})|(^d{4}[-]d{7})$可以匹配形如" - "或" - "的电话号码格式。
6、转义字符
对于已经用于定义元字符和限定符的字符,需要加转义符""来表示。
如:为了匹配形如"192.168.0.1"的IPv4地址(1~255.0~255.0~255.0~255),可以用这样的正则表达式:^(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
这里解释一下第一段IP地址的规则,取值范围为1~255,可分解为以下情况:
250~255:25[0-5];
200~249:2[0-4][0-9];
100~199:[01]{1}[0-9]{2};
0~99: [0-9]{1}[1-9]
再加上".": .
其他三段地址和第一段相似。
7、"( )"可以用于分组
在正则表达式中,用"( )"括起来的部分是一个整体。
8、r(或R)的意义
在正则表达式中,为了保证模式字符串为原生字符串(没有经过加工处理的字符串),可以在模式字符串前加上一个字符‘r’或‘R’。例如:
# 这里用到对的re.match()方法接下来介绍
>>> import re # 导入re模块
>>> re.match("bPy[a-z]+","Python") # 表达式"bPy[a-z]+"不能匹配’Python’
>>> re.match("bPy[a-z]+","Python") # 表达式"bPy[a-z]+"可以匹配’Python’
在上述代码中,原本要用作匹配单词开始或结束的元字符’b’在表达式中字符串中会被视为转义一个字符‘b’,为了转义’b’就不得不再加一个’’符号。
也可以采用下面的方法:
>>> re.match(r"bPy[a-z]+","Python") #加字符’r’,可以保证原生字符串
9、match()方法
Match()方法 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
语法格式:
re.match(pattern, string, [flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例:
import re #导入re模块
print(re.match("www", "www.python.org/").span()) #span()函数可以获取匹配的位置
print(re.match("org", "www.python.org"))
输出结果为:
(0, 3) #在位置0到3(不包括3)匹配成功
None #从起始位置未能匹配成功
10、search()方法
search()方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,则返回Match对象,否则返回None。
语法格式:
re.search(pattern, string, [flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例如:
>>> re.search(r"Pyw+","It"s easy to use Python, but it"s not easy to learn Python.")
可以看出,目标字符串"It"s easy to use Python, but it"s not easy to learn Python."中一共有两个‘Python’,search()方法可以从字符串的起始位置开始查找到‘Python’,当找到第一个匹配值后就停止查找,返回位置信息。
match()和search()的比较
match()要求目标字符串的起始位置就能匹配,search()对目标字符串全段进行逐次匹配,只要首次匹配成功就停止匹配。
请看下例:
>>> import re
>>> print(re.match(r"Pyw+","It"s easy to use Python, but it"s not easy to learn Python."))
输出结果:None
11、findall()方法
findall()方法用于在整个字符串中搜索所有匹配的值,如果匹配成功,则返回以匹配值为元素的列表,否则返回空列表。
语法格式:
re.findall(pattern, string[, flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例:
>>> import re
>>>print(re.findall(r"Pyw+","It"s easy to use Python, but it"s not easy to learn Python."))
输出结果:["Python", "Python"]
可以看出,findall()的结果没有指出匹配的具体位置。
12、正则表达式的应用
字符串替换
这里要用到sub()方法。它的语法格式如下:
re.sub(pattern, repl, string [,count] [,flgs])
其中,pattern是模式字符串;repl是用于替换的字符串;string是原字符串;可选参数count为模式匹配后替换的最大次数,省缺表示替换所有的匹配;可选参数flags的意义与前面的方法的该参数一致。
例:
>>> import re
>>> str1="x=36.567 y=123.234"
>>> str2=re.sub(".d+","",str1) #用空格代替小数点及其后的数字
>>> print(str2)
输出结果:x=36 y=123
分隔字符串
这里要用到split()方法。它的返回值为一个列表,它的语法格式如下:
re.split(pattern, string [,maxsplit] [,flgs])
其中,pattern是模式字符串;string是原字符串;可选参数maxsplit为最大拆分次数,省缺表示拆分所有的匹配;可选参数flags的意义与前面的方法的该参数一致。
例:
>>> import re
>>> str="白日依山尽,黄河入海流。欲穷千里目,更上一层楼!"
>>> re.split(r",|。|!",str) #按照","、"。"、"!"分隔字符串。
["白日依山尽", "黄河入海流", "欲穷千里目", "更上一层楼", ""]
注意,返回值列表中多出了一个空字符。
手游代理前期怎样推广?手游代理的利润空间还是很高的,而且现在几乎人人手机中都有两三个不同的手游,喜欢手游的朋友又很多,所以只要是我们能够做好基础的推广工作,那么手游代理也是一份收益很高的工作。但是毕竟前
游戏推广,是分享而不是推销相信大家的生活中,或多或少都遇到过被推销的情况。不论是在逛商场时被导购推销商场内的产品,还是接到推销电话推销保险房产。那么我们一般在遇到这些推销时,会有什么样的反应呢?相信大多数人
游戏代理之官服,专服,混服,揭秘你所不知的那些事对于游戏而言,无论是网游,页游,还是手游。很多新手玩家或者是刚从事游戏代理的小白,对于游戏的官服,专服,混服的概念肯定不能区服清楚。并且随着市场的变化,以及客户群体的变化,现在还有
一起相约有杀气童话2,网易首款战斗童话MMO手游网易首款战斗童话MMO手游MMORPG类型的游戏想必各位玩家都不陌生,无论是火爆数年的魔兽世界还是最近steam上冉冉升起的古剑ol都取得了一定成绩。但是这些游戏仅仅限制于端游,想
游戏代理平台到底该怎么选,是不是有了APP就能轻松推广?话不多说,先上结论。有了APP并不能让游戏推广变得轻松。可能这个答案很难让人接受,许多已经做了加盟拿到游戏APP的代理可能就会问了。我只要把APP推广出去,那玩家下载了APP,里面
游戏帝国之从游戏代理开始的草根崛起之路(一)十二月,从北方平原上吹来的冷风,裹挟着工业城市的焦煤味,一路南下侵袭着东南沿海的城市。拥挤的水泥森林在这日渐降低的气温里显得冰冷至极,来往的人潮虽一如往常般涌动,可却没有为人们带来
2021年了,做手游代理还有钱赚么?话不多,还是直接摆结论,再慢慢阐述为什么。2021年,做手游代理还是有钱赚的,具体要看你怎么赚,并且不是人人都有钱赚的。首先讲讲为什么,有钱赚。游戏行业,作为一个暴力行业其能带来的
热血伏魔,快感pk猎魔传奇,经典回归猎魔传奇是一款复古风格的传奇游戏,千人同屏万人沙城,自由的野外副本超高爆装,让你再也感受不到寂寞,四大特色等你探索。1。职业单职业无需选择,只需选择性别即可进入游戏,技能集传统3职
成功代理第一步如何选择代理游戏的类别游戏类别众多,从不同的角度可以通过游戏模式游戏内容,又或者游戏平台和游戏地区(国服)来区分。做游戏代理,我们常见的是按游戏内容来区分,我认为主要的原因是手游的可玩性往往比较单一,无
自在逍遥遨游九州,九州仙剑传火爆来袭九州仙剑传是一款集多种玩法为一体的仙侠类手游,这里有超清画质,恢弘场景,神兵仙器,霸气坐骑,酷炫技能以及丰富系统带你领略轻操作重体验的休闲挂机玩法,再搭配有趣的奇遇随机事件,给你带
史诗级恢弘战场,全方位打造真实魔幻世界精灵盛典黎明技能系统助力玩家极限连击,畅快战斗作为MMO游戏。在游戏中玩家可以进行极限操作,华丽转职。无论是操作还是转职那么技能系统一定是无法脱离关系的,技能系统是游戏中玩家角色战斗的主要系统