爬虫学习-day2-regular总结

爬虫学习-day2-regular总结

1.os模块

import os
# os.mkdir(文件路径)    -   在指定的位置创建指定文件夹
# os.mkdir('filse/test')

# os.path.exists(文件夹路径/文件路径)    -   判断指定文件夹或者文件是否存在
os.path.exists()

2.regular 表达式

# 1.正则表达式
#正则表达式是一种可以让复杂的字符串变得简单的工具
# 写正则表达式就是用正则符号来描述字符串规则
from re import fullmatch,findall,search,match,finditer,split,sub
# 1.re模块    -   提供python中所有和正则相关的函数
# fullmatch(正则表达式,字符串)  -   判断整个字符串是否满足正则表达式所描述的的规则
# findall(正则表达式,字符串)    -   提取字符串中满足正则表达式的字符串
# search(正则表达式,字符串) -   匹配字符串中第一个满足正则表达式的字符串
# 注意:python中表达式一个正则表达式一般使用r字符串

2.正则符号

  1. 普通符号 - 在正则表达式中表示符号本身的符号

    result = fullmatch(r'abc', 'abc')
    print(result)
    
  2. . - 匹配任意字符

    result = fullmatch(r'.bc','dbc')
    print(result)
    
  3. \d - 匹配任意一个数字字符

    result = fullmatch(r'\d\dabc','68abc')
    
  4. \s - 匹配任意一个空白字符

    # 空白字符:空格(' ')、换行('\n')、水平制表符('\t')
    result = fullmatch(r'123\sabc','123 abc')
    
  5. \w - 匹配任意一个字母、数字、下划线、或者中文

    result = fullmatch(r'abc\w123', 'abc和123')
    print(result)
    
  6. \D、\S、\W - 分别和\d、\s、\w的功能相反

    result = fullmatch(r'abc\D123', 'abc8123')
    print(result)       # None
    
  7. [字符集] - 匹配在字符集中任意一个字符

    """
    [abc]       -       匹配a或者b或者c
    [abc\d]     -       匹配a或者b或者c或者任意数字: [abc0123456789]
    [1-5]       -       匹配字符1到字符5中的任意一个字符
    [a-z]       -       匹配任意一个小写字母
    [A-Z]       -       匹配任意一个大写字母
    [a-zA-Z]    -       匹配任意一个字母
    [a-zA-Z\d]  -       匹配任意一个字母或者数字
    [a-z=%]
    [\u4e00-\u9fa5]     -   匹配任意一个中文
    """
    
    result = fullmatch(r'abc[M9你]123', 'abc你123')
    print(result)
    
    result = fullmatch(r'abc[M9你\d]123', 'abc0123')
    print(result)
    
    result = fullmatch(r'abc[\u4e00-\u9fa5]123', 'abc和123')
    print(result)
    
  8. [^字符集] - 匹配不在字符集中的任意一个字符

    result = fullmatch(r'ab[^MN]cd','ab)cd')
    print(result)
    
    result = fullmatch(r'abc[^a-z]123', 'abc$123')
    print(result)
    
    result = fullmatch(r'abc[M^N]123', 'abcM123')
    print(result)
    

3.匹配次数的符号

  1. * - 任意次数(0次或者1次或者多次)

    """
    a*  -   a出现任意多次
    \d* -   任意数字任意次数
    [abc]*  -   多个abc
    """
    
    result = fullmatch(r'1a*2', '1aaaaaaaa2')
    print(result)
    
  2. + - 一次或者多次(至少一次)

    result = fullmatch(r'1a+2', '1aaa2')
    print(result)
    
  3. ? - 0次或者1次

    result = fullmatch(r'1a?2', '1aa2')
    print(result)       # None
    
  4. {}

    """
    {N} -   N次
    {M,N}   -   M到N次
    {M,}    -   最少M次
    {,N}    -   最多N次
    
    """
    
  5. 贪婪和非贪婪模式

    """
    在匹配次数不确定的时候,如果有多种次数都可以匹配成功,贪婪取最多的那个次数,非贪婪取最少的那个次数。
    贪婪模式:+、?、*、{M,N}、{,N}
    非贪婪模式:+?、??、*?、{M,N}?、{,N}?
    """
    

第三类符号:分组和分支

  1. 分组 - ()

    """
    正则表达式中可以用()将部分内容括起来表示一个整体;括号括起来的部分就是一个分组
    a.整体操作的时候需要分组
    b.重复匹配  -   正则中可以通过\M来重复它前面第M个分组匹配的结果
    c.捕获    -   提取分组匹配到的结果(捕获分为自动捕获(findall)和手动捕获)
    """
    
  2. 分支 - |

    """
    正则1|正则2|正则3|……  -   先用正则1进行匹配,匹配成功直接成功;匹配失败用正则2进行匹配
    """
    
    # 转义符号:在本身具有特殊功能或者特殊意义的符号前加入\,让特殊符号变成普通
    # 注意:单独存在有特殊意义的符号,在[]中它的功能会自动消失
    result = fullmatch(r'\d[+.?*()\]]\d','3+4')
    

4.reModule

from re import fullmatch,findall,search,split,sub,finditer,match
"""
1)fullmatch(正则,字符串) -   用整个字符串和正则,匹配成功返回匹配对象,匹配返回None
2)findall(正则,字符串)   -   获取字符串中满足正则的子串,默认返回一个列表,列表的元素是所有匹配到的子串(存在自动捕获现象)
3)search(正则,字符串)    -   匹配第一个满足正则的子串,匹配成功返回匹配对象,匹配失败返回None
4)split(正则,字符串)     -   将字符串中所有满足正则的子串作为切割点进行切割
5)split(正则,字符串,[N])     -   将字符串中前N个满足正则的子串作为切割点进行切割
6)sub(正则,字符串1,字符串2) -   将字符串2中所有满足正则的子串都替换成字符串1
7)sub(正则,字符串1,字符串2,N) -   将字符串2中前N个满足正则的子串都替换成字符串1
8)finditer(正则,字符串)  -   获取字符串中所有满足正则的子串,返回-一个迭代器,迭代器中的元素是匹配对象
9)match(正则,字符串)     -   匹配字符串开头

"""
str1 = '技术7晋级赛7jsks7就开始看'
print(str1.split('7', 2))

str1 = '技术22晋级赛709jsks511就开始80看'
print(split(r'\d+', str1, 2))

str1 = '技术22晋级赛709jsks511就开始80看'
print(sub(r'\d', '+', str1))
  1. 忽略大小写(?i)

    print(fullmatch(r'(?i)abc','ABC'))
    
  2. 单行匹配:(?s)

    # 多行匹配(默认):.不能和换行符匹配
    # 单行匹配:.可以和换行符进行匹配
    print(fullmatch(r'(?s)abc.123','abc\n123'))
    print(fullmatch(r'abc.123','abc\n123'))
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值