amigo幸运字符什么意思_Python正则表达式之初始篇:字符匹配

0a6104410e0811ed90debd32e1726ed7.png

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

re 模块使 Python 语言拥有全部的正则表达式功能。

本章节主要介绍Python中常用的正则表达式模式与实例。

1. 正则表达式模式

模式字符串使用特殊的语法来表示一个正则表达式:

字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。

多数字母和数字前加一个反斜杠时会拥有不同的含义。

标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。

1.1 "^"

"^d" 代表的意思是以d元素开头的任意一个字符串,也就是说只要是以d开头的字符串,后面的元素不论是什么,都是符合规则的,总之必须要以d开头。

“.” 较为常用,其代表的意思是任意字符,其表示的范围非常广,可以接任意字符,不论是中英文,还是下划线之类的特殊字符,都是可以代表的。举个栗子,正则表达式“^d.”就是代表以d开头的字符串,b后边接任意字符都可以。

“*” 也十分常用,其代表的意思是前面的字符可以重复任意多遍,可以是0次,1次,2次等任意多次。

以下为第一个实例,匹配的正则表达式"^z.*" z开头的后面接任意多任意类型的字母数字字符

df75266f4fa9dfb441c456a8930b1ae6.png

如上图所示,该正则表达式能够顺利匹配得到string中某部分。

1.2 "$"

“$” 代表的意思是结尾字符。举个栗子,正则表达式“3$”,表示匹配以3为结尾的字符串。代码演示如下图所示。

看以下示例,很好理解,两个正则表达式分别匹配0结尾和2结尾的实例,结果当然匹配不到2结尾的字符串。因为string结尾是0。

5c1474615a620cf871b450b114fb81d2.png

1.3 "?"

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。

非贪婪匹配:就是匹配到结果就好。

首先看一个‘贪婪’的例子:

2890b280eae2450a1a9756b0a5cfe63d.png

在这次贪婪模式的匹配下,匹配的是 "yes" and i say "no",因为默认为贪婪匹配,所以选取了最长的部分。

其次观察一下如果是‘非贪婪’的例子。

2afb9b97af9fc52b211be748f350948c.png

显然,加入模式字符“?”之后,进入了非贪婪模式,而不会选取最长的那一段。

为了加深理解,再来看一个贪婪与非贪婪的实例。(d+表示单个以及多个数字)

23e944e81a6bb110a9961fa4661527d1.png

看看这个贪婪例子,得到这个结果由于以下原因:

1.由于存在‘.*’则这一部分在贪婪模式下会在满足正则表达式的情况下让匹配的段最长

2. d+表示任意长度的数字组合(至少有一个数字)

所以为了满足1的贪婪条件,2的数字组合长度为1

而第二种情况下,在‘.’后加上‘?’使得前面这一段变的非贪婪(即匹配到满足条件的即可),所以当它们匹配到第一个数字1时,就结束‘.*’ 这一部分的匹配,开始‘d+’这一部分。

1.4 {}

“{}”实质上也是一个限定词的用法,其限定前面字符所出现的次数,其常用的模式有三种,分别是“{数字}”、“{数字,}”和“{数字1, 数字2}”。举个例子,如“{1}”、“{1,}”和“{1, 3}”。

1.形式A 限定{}前字符数量

如下图所示,.{2}指定了两个之间有2个字符,所以不会匹配只有一个中间字符的‘pcp’,而且根据贪婪匹配原则,会选取前面‘.*’最长的匹配结果所以选择的是‘pbap’而不是‘pabp’,‘pcpp’

4ac505c2f28025483a47018ff004fec7.png

2.形式B “{1,}”代表的是前面的字符出现1次及以上;特殊字符“{2,}”代表的是前面的字符出现2次及以上;特殊字符“{3,}”代表的是前面的字符出现3次及以上;以此类推。举个栗子,如下图所示。

6e45a0e1b0f007e4f81e33f5aa00daf8.png

3.形式C “{2, 3}” 代表的是前面的字符至少出现2次,最多出现3次;

ce552feef8cd68e1a5f997a712450a10.png

注意,这里采用了‘非贪婪’模式,所以出现第一个符合匹配正则表达式的部分之后,该p前面的部分将最短。

1.5 "|"

竖线“|”实质上是一个或的关系。并且当两个都满足时会优先匹配最前面的

358b1581ef7411fbccc30303fed03e79.png

还能够使用这种多层的匹配

56f25c276714d3bfdba21c71ad047866.png

为什么这里不是paa而是paap呢?因为match函数的规则。

89975d05e09b75aac3919d2af28320c6.png

也就是说re.match会从最左边开始匹配,并且要求必须在起始位置开始匹配。

那么这里的匹配可以理解为:paap14是在起始位置的,而paa14和起始位置paap14不符合(这里的起始不是指第一个,而是能从第一个字符向后匹配到某个字符,期间不断不少,个人理解)

1.6 "[]"

正则表达式特殊符号是“[]”。中括号十分实用,其有特殊含义,其代表的意思是中括号中的字符只要满足其中任意一个就可以。

A. 匹配模式为[abcd],在这里正则表达式代表的意思是字符串第一个字符是abcd四个字符中的任意一个。

4ffedfcdc06dd7e99673ae134630f78a.png

B. [0-9]代表是的是0到9中任意一数字

9711985930ac1309e3d365fc0befb861.png

C. [a-z]代表26个英文小写字母;[A-Z]代表26个英文大写字母。

339802e5dc2d7938bf84d28b874e2459.png

D. [^],在中括号中加入特殊字符“^”,表示非,取反的意思。举个栗子,“[^1]”的意思是字符不等于1。

4147c5688e430a4a7048402dafcb2242.png

还有一些用法,以下就不一一实例了

1e92f38a4879856e19dadd4943f4b55d.png

2.特殊字符类

2.1 “s”与“S”

“s”代表的意思是匹配空格

ca2bc29ef88a3de9e8b57d3712177eba.png

s* 匹配多个空格

b2aca7954eea8f7c70609feb2685a0c2.png

“S”代表的意思与“s”代表的意思刚刚相反,也就是说匹配的那个字符只要不是空格,都可以匹配。

b2668bff36eb4205b7d22a90d24e0010.png

2.2 [u4E00-u9FA5]

[u4E00-u9FA5]特殊字符是固定的写法,其代表的意思是汉字。换句话说,只要字符中是汉字,就可以通过该字符进行匹配,该特殊字符也是用中括号括起来的。

5e9f8b5ec03c27f7a74aba5660bd2fa8.png

2.3 "w"与"W"

“w”代表的意思是该字符为任意字符,但是和特殊字符“.”的意思不同。

“w”代表的字符主要包括26个大写字母A到Z,即[A-Z]、26个小写字母a到z,即[a-z]、10个阿拉伯数字0到9,即[0-9]和下划线“_”。总结起来就是,“w”代表的意思是[A-Za-z0-9_]中任意一个字符。

7aca712d80e37f4b96fd3db8818e325b.png

“W”代表的意思与“w”刚刚相反,也就是匹配除了[A-Za-z0-9_]之外的其他字符。接上一步的例子,此时将“w”改为“W”。

39fa5acd095cba1b2f9f7c321280f035.png

对比:“.” 代表的意思是任意字符,其范围比“w”代表的意思要广。

3. 简单应用

用以上所学的正则表达式字符和模式实现一个简单的应用。

import 

以下就是今天所“查漏补缺”的正则表达式,目前还只是最基础的应用,下次会详细写python正则表达式的处理函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值