爬虫快速上手之正则表达式总结

目录

一、正则表达式

二、查找相关方法

三、re.Match类的使用

四、re.compile()方法的使用

五、正则修饰符

六、标点符号的特殊意义

七、字母的特殊含义

八、正则替换

九、贪婪模式和非贪婪模式

十、正则表达式小结


一、正则表达式

1、概念
    正则表达式是一个特殊的字符序列,通常被用来检索、替换那些符合某个模式(规则)的文本;
    在python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块实现全部的正则表达式功能;
2、特点
    灵活性、逻辑性和功能性非常强
    可以迅速地用极其简单的方式达到字符串的复杂控制
    对于刚接触的人来说,比较晦涩难懂

二、查找相关方法

1.match和search:
        共同点:1.只对字符串查询一次 2.返回值类型都是re.Match类型的对象
        不同点:match是从头开始匹配,一旦匹配失败,就返回None;
                        search是在整个字符串里匹配
2.finditer:查找到所有的匹配数据放到一个可迭代对象里
3.findall:查找到所有的匹配数据放到一个列表里
4.fullmatch:完整匹配,字符串需要完全满足正则规则才会有结果,否则就是None

import re
from collections import Iterable

# match和search
m1 = re.match(r'hello', 'hello world')
print(m1)
m2 = re.match(r'good', 'hello, good morning') # match是从头开始匹配,一旦匹配失败,就返回None
print(m2) # None
s1 = re.search(r'good', 'hello, good morning')
print(s1)
s2 = re.search(r'Hello', 'hello, good morning') # search在整个字符串查找,找不到返回None
print(s2) # None

# finditer 返回的结果是一个可迭代对象
# 可迭代对象里的数据是匹配到的所有结果,是一个re.Match类型的对象
f1 = re.finditer(r'x', 'sdfdfkxsdjfsdxslxljfdx')
print(f1)
print(isinstance(f1, Iterable)) # True
for f in f1:
    print(f)

# findall 返回的结果为满足规则的数据组成的列表
fa = re.findall(r'x', 'sdfdfkxsdjfsdxslxljfdx')
print(fa)

三、re.Match类的使用

        当我们调用re.match、re.search或者对re.finditer方法的结果进行迭代时,拿到的数据类型都是re.Match对象

1.span() 匹配到的结果字符串的开始和结束下标((3, 12)包括3不包括12

2.group() 表示正则表达式的分组

(1)在正则表达式里使用()表示一个分组

(2)如果没有分组,默认只有一组,就是把整个正则表达式当做一个整体

(3)分组的下标从0开始

3.groups() 将得到的分组组成一个元组

4.groupdict() 获取到分组组成的字典,使用(?P正则表达式) 可以给分组起名字

import re

m = re.search(r'm.*a', 'osdmsdh23nda')
# print(m) # 
# print(dir(m)) # 查看对象的属性和方法
print(m.span()) # 匹配到的结果字符串的开始和结束下标((3, 12)包括3不包括12

# 获取匹配的字符串结果
print(m.group()) # 默认拿第0组,就是把整个正则表达式当做一个整体 msdh23nda
print(m.group(0)) # msdh23nda
# print(m.group(1)) # IndexError: no such group
# 四个分组的正则表达式
m1 = re.search(r'(0.*)(2.*)(3.*)

你可能感兴趣的:(python,正则表达式,正则表达式,python)