python正则表达式小mark

1.关于match和search函数的使用:

在pytho中的re包中,match 和 search 都可以搜索字符串进行模板匹配。match()从字符串的起始位置开始匹配,如果成功匹配,将返回匹配的对象;否则返回None;然后使用对象的group()方法可以显示那个成功的匹配。如下:

python正则表达式小mark

python正则表达式小mark

而search()方法工作方法不同于match()在于,search()将会是在字符串任意的位置和给定的正则表达式匹配,返回第一次成功匹配的地方,若成功匹配,返回对象;否则返回None。例如:

python正则表达式小mark

2.匹配多个字符串的情况

我们可以使用python语法中的择一匹配符号(|),例如:

python正则表达式小mark

python正则表达式小mark


3.匹配任意的单独一个字符

这里我们使用正则表达式(.\w)去匹配,例如

python正则表达式小mark

python正则表达式小mark

如果在正则表达式中真正的要去搜索一个小数点,我们可以通过转义字符实现,例如:

python正则表达式小mark

python正则表达式小mark

4.创建一个字符集并且比较[][][][]和__|__两种匹配的区别

[][][][]正则式和__|__正则式差别在于,举个例子:

[cr][23][dp][o2]可以匹配c2do,c3do,...,r3p2等16种字符串,但是若是要严格限制匹配,则会使用__|__正则式,例如我们使用c2d2|c3po则只能是匹配c2d2和c3po这两种字符串。

python正则表达式小mark

python正则表达式小mark

5.重复、特殊以及分组字符

python编程中要匹配一个电子邮箱地址我们可以使用正则式(\[email protected]\w+\.com),但如果想要匹配更多可能的其他邮件,譬如说还有其他格式的邮箱地址,或者会有添加主机或者更多子域名名称的邮件地址,那怎么去匹配呢?

正则式中?表示该模式下的匹配模板出现0或者1次的情况,那么我们可以借用过来:使用(\[email protected](\w+\.)?\w+\.com),例如:

python正则表达式小mark

同样的,使用*表示字符串中出现0或者多次的匹配模板情况,那么我们可以来一个扩展,即表示中间出现任意的中间子域名的情况:

python正则表达式小mark

这是正常的邮箱地址匹配,这还不能正确匹配一些奇葩的邮件地址,比如中间会出现‘-’‘+’等非字符或者数字的情况。如果有这种字符串该怎么办呢?

此时我们可以使用()()()来完成,例如(\w+)-(\d+):

python正则表达式小mark

如果我们要使用匹配的子字符串怎么提取出来呢?

我们可以使用()和group()以及groups()方法实现:

python正则表达式小mark

6.匹配字符串的起始和末尾以及单词边界

这里我们都是用search()去匹配,关于search()和match()方法的区别前面已经简要介绍了。(^\w)表示从起始第一个字符进行匹配,(r'\bw')表示边界匹配。

python正则表达式小markpython正则表达式小mark

7.findall()和finditer()查找每一次在字符串中的位置

findall()查询某一字符串中某个正则表达式全部的非重复的情况,并且返回一个列表,是一个子组的列表。那么finditer()返回的就是迭代器,表示在匹配对象中迭代,我们使用代码去理解:

python正则表达式小mark


8.使用sub()和subn()搜索和替换

同样的我们在字符串中进行查找,那么必然会有需要替换的时候。sub()和subn()就为我们提供了这样的实现,唯一不同的是subn()会返回一个替换后的字符串和替换次数一起的元祖。

python正则表达式小mark

9.使用split()分割字符串

python正则表达式小mark