• 21天学习挑战赛—Python学习记录第一篇


    21天学习挑战赛—Python学习记录第一篇

    ​——

    活动地址:CSDN21天学习挑战赛

    ————

    前言

    一名大学牲,参与本次21天学习挑战赛,一个是为了充实自己的暑假,不在暑假过度放松,第二个就是想要去学会 python 这门语言了。
    自己的专业方向是网络安全,不过只要是计算机类都是多多少少需要掌握一两门语言吧。而 python语言,就是大部分人都会去选择的语言,同时也是我所选择的。
    在这之前,也有一点点的 python 基础,会写一些简单的语法。相比其它语言,python 的语法格式还是更为简洁的,用起来也很方便,希望在后面的学习中能够对 python 有更多的理解与掌握。

    ————

    学习计划

    每周三次以上学习,每次学习记录做好笔记。并完成每周三次发博文任务。

    —————

    正则表达式学习

    正则表达式已经内嵌在Python中,通过import re模块就可以使用。

    作用:

    进行检索字符串,对某些字符进行匹配等

    使用场景:

    爬虫爬取数据时、数据开发、文本检索和数据筛选

    ——

    运算符优先级

    各正则表达式运算符的优先级顺序:
    请添加图片描述

    相同优先级的从左到右进行运算,不同优先级的运算先高后低

    ——

    re模块使用

    需要通过正则表达式对字符串进行匹配的时候,就要用到这个模块。

    match方法基本使用:
    re.match(pattern, string, flags=0)

    pattern: 匹配的正则表达式。
    string: 要匹配的字符串。
    flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

    例子:

    import re
    a = re.match("abc","abcd")
    print(a.group())
    
    • 1
    • 2
    • 3

    match方法进行匹配。group 方法进行提取匹配到的数据。

    在match() 函数中,表示我要在 abcd 字符串中匹配 abc 字符串,然后结果就在 abcd 中匹配到了 abc 。实际中,"abc"位置表示的正则表达式可能并没有这么简单,可能有很多的运算符。
    请添加图片描述

    ——

    匹配单个字符

    ——

    "."的用法

    .: 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,使用象 ‘[.\n]’ 的模式。

    测试例子:

    import re
    a = re.match("a.c","agckw")
    print(a.group())
    
    • 1
    • 2
    • 3

    请添加图片描述

    ——

    [ ] 的用法

    [...]: 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’

    测试例子:

    import re
    a = re.match("[A-Z]gc","Hgckw")
    print(a.group())
    
    • 1
    • 2
    • 3

    请添加图片描述

    ——

    \d 的用法

    \d: 匹配任意数字,等价于 [0-9]。

    测试例子:

    import re
    a = re.match("Hg\dc","Hg6ckw")
    print(a.group())
    
    • 1
    • 2
    • 3

    请添加图片描述

    单字符匹配的字符:

    . : 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
    [...]: 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
    \w: 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]'。
    \W: 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。
    \s: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
    \S: 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
    \d: 匹配任意数字,等价于 [0-9]
    \D: 匹配一个非数字字符。等价于 [^0-9]

    ————
    ——

    匹配多个字符

    ——

    * 的用法

    *: 匹配前一个字符出现0次或者无限次,即可有可无

    测试例子:

    import re
    a = re.match("[a-z]*","abcdYFK")
    print(a.group())
    
    • 1
    • 2
    • 3

    即匹配任意个小写字母
    请添加图片描述

    ——

    {m}{m,n}用法

    {m}: 匹配前一个字符出现m次
    {m,n}: 匹配前一个字符出现从m到n次

    测试例子:

    import re
    a = re.match("[a-zA-Z0-9_]{5}","abG9j01kl")
    b = re.match("[a-zA-Z0-9_]{6,15}","a4BI3d测试g2K")
    print(a.group())
    print(b.group())
    
    • 1
    • 2
    • 3
    • 4
    • 5

    请添加图片描述

    *: 匹配前一个字符出现0次或者无限次,即可有可无
    +:匹配前一个字符出现1次或者无限次,即至少有1次
    ?: 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
    {m}: 匹配前一个字符出现m次
    {m,n}: 匹配前一个字符出现从m到n次

    ——

    匹配开头结尾

    ^: 匹配字符串的开头
    $: 匹配字符串的末尾。

    测试例子:

    import re
    list = ["abG989","124@qq.com","h827197@qq.com","123anasm","@qq.com142"]
    for i in list:
        a = re.match("^[a-zA-Z_]+[0-9]{3}",i)
        if a:
            print("匹配结果:"+ a.group() + "————" + i +" 符合a匹配规则的要求")
        b = re.match("[\w]+@qq.com$",i)
        if b:
            print("匹配结果:"+ b.group() + "————" + i +" 符合b匹配规则的要求")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这里有a , b两个匹配要求,
    a匹配规则中 ^[a-zA-Z_]+[0-9]{3} 要求开头是一个以上的字母,再匹配三个数字。
    b匹配规则中 [\w]+@qq.com$ 要求必须以@qq.com 结尾,前面匹配一个以上包括下划线的任何单词字符。

    其中用到了
    \w: 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]'。
    +:匹配前一个字符出现1次或者无限次,即至少有1次

    请添加图片描述

    其它的一些运算符:
    \A: 匹配字符串开始
    \z: 匹配字符串结束
    \Z: 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
    \G: 匹配最后匹配完成的位置。
    \b: 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’
    \B: 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’

    ————

    注:
    匹配字符的例子先到这里,不过我还学习到一个问题。
    match函数只能从头开始匹配,不能从中间开始。而当返回值为none时,再次调用group()方法就会出现AttributeError: 'NoneType' object has no attribute 'group'这类报错。
    请添加图片描述

    ——
    ——

    re模块其它方法函数的学习与使用

    ——

    re.search的用法

    扫描整个字符串并返回第一个成功的匹配;匹配成功re.search方法返回一个匹配的对象,否则返回None。

    函数语法:
    re.search(pattern, string, flags=0)

    pattern: 匹配的正则表达式
    string: 要匹配的字符串。
    flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

    前面说到match函数只能从头开始匹配 ,如果字符串开始不符合正则表达式,则匹配失败。
    而用 re.search 就可以从中间匹配了。

    测试例子:

    import re
    a = re.search("[0-9]{3}","abc123wnf")
    print(a.group())
    
    • 1
    • 2
    • 3

    请添加图片描述

    ——

    re.findall 的用法

    在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

    语法和前面的search和match类似。
    re.findall(pattern, string, flags=0)

    重点在可以匹配多个结果。
    匹配三个数字,返回一个列表,包含所有符合的匹配结果。

    测试例子:

    import re
    a = re.findall("[0-9]{3}","abc123wn765f32fasg")
    print(a)
    
    • 1
    • 2
    • 3

    请添加图片描述

  • 相关阅读:
    k8s笔记21--prometheus 监控 nginx ingress
    直接在*.vue文件(SFC)中使用JSX/TSX渲染函数,真香!
    Spring boot应用【tailf】服务启动停止管理脚本
    MSDC 4.3 接口规范(7)
    区块链私链搭建出现错误
    Android修行手册 - TabLayout全解析 - 和ViewPager联动
    【单片机入门】(二)应用层软件开发的单片机学习之路-----点灯大师
    C和指针 第13章 高级指针话题 13.2 高级声明
    97.qt qml-自定义Table之实现ctrl与shift多选
    【RuoYi-Vue-Plus】扩展笔记 06 - 数据源 Druid 修改为 HikariCP
  • 原文地址:https://blog.csdn.net/Goodric/article/details/126106306