Python简明教程第9节:正则表达式(一)
正则表达式其实就是一个特殊的字符串,用它可以检查与我们要求想匹配的字符串。
Python 在1.5 版本之后增加了一个 re 模块,也就是正则表达式相关的模块。
match()方法
首先是正则表达式的使用,否则会显得很枯燥。match()方法,对字符串的开头部分进行匹配。
正则使用匹配对象Macth Object具有group⽅法,⽤来返回字符串的符合正则的部分,它是一个字符串。
示例正则表达式
正则表达式就是我们需要按照什么样的规则筛选目标字符串,得到想要的结果。这就是正则表达式的“道”。道生一,一生二……那看看正则表达式单个字符的匹配:
单个字符匹配规则然后是多个字符:
多个字符匹配规则在使用正则表达式的时候,有一个容易忽略的地方就是边界,特别是结束的边界需要注意。
边界其实结束边界是使用比较频繁的,毕竟确定如何结束很重要。下面是一个正则匹配的案例:
符合规则 不符合规则要求:
一个163的邮箱,@符号前面至少6位……
这里如果没有边界限制的话,就会匹配到不正确的邮箱格式。在正则表达式中直接写出来的部是进行绝对匹配的。例如“@163\.com”就是这样。
基于上面的规则,原则上来说,已经可以满足你的绝大部分需求了。正则的表达式的书写规则灵活,所以对于特定的匹配规则可能有很多种写法,无论如何只要细心理解规则就可以拼凑出正确的正则表达式。
我们继续看上面的正则表达式的这部分“@163\.com”,你肯定已经知道了,“\”是转义字符,由于“.”在正则表达式中具有特殊的含义,我们使用转义符使其表示其本身。这时候就会引出一个很有意思的问题,你如果真的想对“\”进行匹配怎么办?记住“\”本身也是特殊字符,你是需要对其本身进行匹配。当我们想要对一个特殊字符本身进行匹配的时候,它的书写格式应该是“转义符+特殊字符”。按照要求,转义字符是“\”,你要得到“\”首先就要对“\”进行转义,然后就是得到一个“\”,由于它是转义符,也需要转义。
所以最好我们需要“\\\\”来表示对“\”的转义。
有点绕。
“\\\\”前两个反斜杠,第一个是转义字符,第二个是一个反斜杠,结果就是得到一个反斜杠,在整个表达式中充当的是转义字符
后两个反斜杠,第一个是转义字符,第二个是一个反斜杠,结果就是得到一个反斜杠,在整个表达式中充当的是反斜杠
另一种理解:
第一个反斜杠,充当转义字符,对第二个反斜杠进行转义,得到一个反斜杠,对第三个反斜杠进行转义,得到一个反斜杠,充当转义字符,对第四个反斜杠进行转义得到一个反斜杠。
则可能就是编程语言中的反斜杠困扰吧。
原生字符串
很幸运,你是 Python工程师 ,Python中原生字符串很好的解决了这个问题,有了原生字符串后,你就能彻底摆脱反斜杠带给你的困扰。
所谓的原生字符串,就是在原来字符串的基础上加上一个字母“r”。在原生字符串中“\”都是默认经过转义的。
也就是说,你写一个“\”,那么它就是一个“\”。也就是说,“\” 具有反斜杠的全部效力,包括转义。
于是,上面的需要可以写作 r“\\” ,由于在原生字符串中“\”都是默认经过转义的。所以两个反斜杠就真的都是反斜杠,第一个用作转义……
在这里不推荐大家在正则表达式以外的地方使用原始字符串。
我们可以简单理解为原生字符串是正则表达式中为了简化而专用的字符串形式,其实你去看原生字符串的类型就会看到其实就是字符串类型。
Then,that’s all,thank you。