爬虫解析Re 之(六 ) --- Re模块

正则表达式

正则表达式其实就是特殊的字符串, 帮助进行检索, 校验, 查询等行为,是对字符串操作的一种逻辑公式,

事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符”,这个“规则字符” 来表达对字符的一种过滤逻辑。

Python提供的正则表达式机制: 需要导入模块 re

正则表达式使用场景

验证的作用: 密码的验证 用户名的验证 邮箱 手机号等等

爬虫: 查询校验

正则表达式的规则

正则表达式处理字符串的强大工具, 拥有自己独特的语法, 并且拥有一个独立处理正则表达式的引擎.

正则表达式处理字符串的效率要比系统本身提供的低, 如果系统的能够完成, 就不用正则表达式

替换 ---- 将字符串中b小写字母 替换成B --- 系统的能完成直接使用系统的即可

替换 ---- 将第一个替换成B 第二个替换成 m --- 系统不能完成 使用正则表达式

在re模块下常用的方法

1. re.compile(正则表达式的语法)

  根据正则表达式语法生成对应正则表达式对象,方便复用该正则表达式

扫描二维码关注公众号,回复: 7126420 查看本文章

2. 正则表达式对象.match(要进行验证的字符串)

  如果正则表达式语法中没有限制头尾, 验证字符串是否以正则表达式对应字符串开头

  如果限制了头尾, 也就是限制了字符串的长度, 验证的字符串内容是否满足正则表达式的需求

  如果满足 返回的match对象 不满足返回的是None

3. 正则表达式对象.search(待查找的字符串)

  在待查找的字符串中 查找是否有正则表达式对应的字符串内容 如果有获取查找到的第一个内容 以及索引区间 找到的话返回的Match对象 找不到返回None

4. 正则表达式对象.findall(待查找的字符串)

  在待查找的字符串中 查找是否有正则表达式对应的字符串内容 将所有满足需求的字符串内容存放于列表

5. 正则表达式对象.sub(正则表达式,替换成的字符串,原字符串)

  在待查找的字符串中 替换字符串中每一个匹配的子串后返回替换后的字符串

正则规则

 1 \w      匹配字母数字及下划线
 2 \W      匹配非字母数字下划线
 3 \s      匹配任意空白字符,等价于[\t\n\r\f]
 4 \S      匹配任意非空字符
 5 \d      匹配任意数字
 6 \D      匹配任意非数字
 7 \A      匹配字符串开始
 8 \Z      匹配字符串结束,如果存在换行,只匹配换行前的结束字符串
 9 \z      匹配字符串结束
10 \G      匹配最后匹配完成的位置
11 \n      匹配一个换行符
12 \t      匹配一个制表符
13 ^       匹配字符串的开头
14 $       匹配字符串的末尾
15 .       匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
16 [....]  用来表示一组字符,单独列出:[amk]匹配a,m或k
17 [^...]  不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
18 *       匹配0个或多个的表达式
19 +       匹配1个或者多个的表达式
20 ?       匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
21 {n}     精确匹配n前面的表示
22 {m,m}   匹配n到m次由前面的正则表达式定义片段,贪婪模式
23 a|b     匹配a或者b
24 ()      匹配括号内的表达式,也表示一个组

re.match()

re.match(pattern,string,flags=0)

尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配的话,match()就会返回None

import re
content= "hello 123 4567 World_This is a regex Demo"

result = re.match('^hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$',content)
result = re.match("^hello.*Demo$",content)               # 泛匹配,写法比上面简单
result = re.match('^hello\s(\d+)\sWorld.*Demo$',content) # 匹配字符串中具体的目标,用()括起来


print(result)
print(result.group())   # 获取匹配的结果
print(result.span())    # 获去匹配字符串的长度范围

 1 import re
 2 
 3 string = '''If you have great talents, industry will improve them; 
 4 if you have but moderate abilities,
 5 industry will supply their deficiency.'''
 6 
 7 # 1)元字符
 8 # 普通字符、字母、下划线、数字等ascii码字符
 9 pat = r'a'
10 # 非打印字符
11 pat = r'\n'
12 ret = re.findall(pattern=pat,string=string)
13 
14 # 2)通配符
15 # y用某些特殊的字符,来表示一类字符串
16 '''
17 \w  任意的字母、数字、下划线
18 \W  任意的非字母、数字下划线
19 \d  任意的数字
20 \D
21 \s  空白
22 \S
23 [abc]  匹配a、b或c
24 [a-fA-P1-5] 匹配a-f或A-P或者1-5中的任意一个
25 [^abc] 任意一个非abc的字符串
26 '''
27 pat = r'[^abc]'
28 pat = r'[^a-f]'
29 pat = r'\w'
30 ret = re.findall(pattern=pat,string=string)
31 print(ret)
32 # 特殊字符
33 '''
34 .   任意的可见字符
35 ^   从字符串的开头匹配
36 $   字符串以后什么为结尾
37 +   重复一到多次
38 *   重复0到多次
39 ?  重复0或者1次
40 {m} 重复每次  {,m}至多重复m次   {m,}  {m,n}
41 '''
42 pat = r'^If.+\n.+\n.+'
43 # pat = r'^If.+$'
44 ret = re.findall(pattern=pat,string=string)
45 print(ret)
46 
47 # 3) 模式修正
48 # 如果要进模式修正需要用complile将正则表达式创建成一个正则对象
49 # re.S  把多行字符串看成一行
50 # re.M  把多行字符串拆成多个单行来处理
51 # re.I  忽略大小写
52 pat = re.compile(r'^If.+',re.S)
53 ret = pat.findall(string)
54 print(ret)
55 
56 # 4) 贪婪模式和懒惰模式
57 string = "afadfasadfafapyasdfadsfapyafadpypyafasdfapyasfasdfdaspyafafdaspyrtyui"
58 pat = re.compile(r".*py") # 贪婪模式:按照规则进行寻找一直找到最后一个符合规则字符串为止
59 pat = re.compile(r".*?py") # 懒惰模式:按照规则进行寻找只要找到符合规则的字符串就立即停止
60 ret = pat.findall(string)
61 print(ret)

猜你喜欢

转载自www.cnblogs.com/TMMM/p/10815652.html