美文网首页
day23-re模块

day23-re模块

作者: 天行_b6d0 | 来源:发表于2020-08-06 18:40 被阅读0次

一、re模块的几个函数

1、re.match()
  • re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
  • 函数语法: re.match(pattern, string, flags=0)(正则表达式,字符串,标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。)
  • 匹配成功re.match方法返回一个匹配的对象,否则返回None。
import re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配
2、re.search方法
  • re.search 扫描整个字符串并返回第一个成功的匹配。
  • 函数语法:re.search(pattern, string, flags=0)
import re
print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配
3、findall方法
  • 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

  • 注意: match 和 search 是匹配一次 findall 匹配所有。

  • 语法格式为:findall(string[, pos[, endpos]])

参数:

  1. string : 待匹配的字符串。
  2. pos : 可选参数,指定字符串的起始位置,默认为 0。
  3. endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

二、正则表达式

正则表达式:由一系列特殊字符拼接而成的表达式/规则,该表达式用于从一个大字符串中匹配出符合规则的子字符串

1、\w 匹配数字、字母、下划线
import re
print(re.findall('\w',"1b2  hhh c_1    ahvfbfioi"))
2、\W 非数字、字母、下划线
import re
print(re.findall('\W',"1b2  hhh c_1    @ahvfbfioi"))
3、\s匹配 任意空白字符,{\t,\n,\r,\f}
import re
print(re.findall('\s',"1b2  h\nhh c_1\tahvfbfioi"))
4、\S 非空白字符
import re
print(re.findall('\S',"1b2  h\nhh c_1\tahvfbfioi"))
5、\d 匹配任意数字
import re
print(re.findall('\d',"21b  h\nhh c_1\tahvfbfioi"))
6、\D 匹配任意非数字
import re
print(re.findall('\D',"1b2  h\nhh c_1\tahvfbfioi"))
7、 .用来匹配任意一个字符
import re
print(re.findall("a.b","a1b a2b aab aaaaaaab a+b a-b a b a c"))
print(re.findall("a.b","a1b a2b aab aaaaaaab a\tb a-b a\nb ac",re.DOTALL))  # 加上可以匹配换行符
8、 ^匹配字符串开头
import re
print(re.findall("^a.b"," a1b a2b aab aaaaaaab a+b a-b a b a c"))  # 开头匹配不到就不匹配了
9、$ 匹配字符串末尾
import re
print(re.findall("a.b$"," a1b a2b aab aaaaaaab a+b a-b a b a c"))  # 从尾部开始匹配不到就不匹配了
10、 [ ]匹配中括号里面范围内的字符
import re
print(re.findall("a[^a-z-]b"," a1b aZb aab aaaaaaab a+b a-b a b a c"))  # 加上^是取反
11、?左边的字符出现0或1次
import re
print(re.findall("ab?"," a1b ab abbb a2b aab aaaaaaab a+b a-b a b a c"))
12、 * 左边字符出现0或无数次
import re
print(re.findall("a*b"," a1b a2b aab aaaaaaab a+b a-b a b a c"))
13、+左边字符出现一次或无数次
import re
print(re.findall("a+b"," a1b a2b aab aaaaaaab a+b a-b a b a c"))
14、{n,m}左边那个字符出现n次到m次
import re
print(re.findall("a{0,8}b"," a1b a2b aab aaaaaaab a+b a-b"))
15、 ():分组 把括号里的当成一个整体进行匹配,每组取一个
import re
print(re.findall('ab+','ababab123'))   # ['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123'))   # ['ab'],匹配到末尾的ab123中的ab
16、取消分组
import re
print(re.findall('(?:ab)+123','ababab123'))   # findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容
17、 ?!pattern,表示在没有配到pattern的字符串的前提下,再进行后续的正则表达式匹配,后续匹配仍然从被匹配字符串的头开始

匹配密码,密码必须是由6位数字与字母组成,并且不能是纯数字也不能是纯字母

print(re.search("(?!^[0-9]+$)(?!^[a-zA-Z]+$)^[0-9A-Za-z]{6}$","123asf").group())  # 123asf

上述正则的意思为:在匹配(?!^[0-9]+$)以及(?!^[a-zA-Z]+$)过后,如果字符串成功后在从头去匹配(?!^[a-zA-Z]+$),最终匹配完。

18、?=pattern,表示在配到pattern的字符串的前提下,再进行后续的正则表达式匹配,后续匹配仍然从被匹配字符串的头开始

匹配密码,密码强度:强,必须包含大写,小写和数字,和特殊字符(!,@,#,%,&),且大于6位

while True:
    pwd = input("please your password: ").strip()  # 比如输入:Aa3@adf123
    pwd_pattern= re.compile("(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#%&])^([a-zA-Z0-9!@#%&]){6,}$")
    if pwd_pattern.search(pwd) is None:
        print("密码强度不够")
    else:
        break

上述正则表达式的意思:

  1. 首先是(?=.*[A-Z])匹配,.*表示密码中可以包含多个字符,[A-Z]代表密码中需要包含至少一个大写字母,注意一定不要去掉.*写成(?=[A-Z]),那样表示密码只能由一个字符组成,该字符是大写字母
  2. 其次是(?=.*[a-z])匹配,同上,确保密码中必须至少有一个小写字母
  3. 然后是(?=.*[0-9])匹配,同上,确保密码中必须至少有一个数字
  4. 然后是(?=.*[!@#%&])匹配,同上,,确保密码中必须至少有一个特殊符号!@#%&
  5. 最后是^([a-zA-Z0-9!@#%&]){6,}$,确保密码是由[a-zA-Z0-9!@#%&]字符构成,至少有6位
19、?: 是非获取匹配,匹配冒号后的内容但不获取匹配结果,不进行存储供以后使用。

匹配email:

print(re.findall("(?:[a-zA-Z0-9]+)@(?:[0-9a-zA-Z]+).com","18611323113@163.com xxx@qq.com"))

正则表达式符号意义.png

更具体的:http://blog.csdn.net/yufenghyc/article/details/51078107
手动测试:http://c.runoob.com/front-end/854

二、面向对象编程

面向过程编程

核心是过程二字,过程是解决问题的步骤,即先干啥再干啥后干啥。
基于该思想写程序就是在设计一条条的流水线

  • 优点:复杂的问题流程化、进而简单化
  • 缺点:扩展性差

面向对象编程

核心是对象二字,对象是一个用来盛放数据与功能的容器
基于该思想写程序就是在整合程序

  • 优点:可扩展性强
  • 缺点:编程的复杂度高

相关文章

  • day23-re模块

    一、re模块的几个函数 1、re.match() re.match 尝试从字符串的起始位置匹配一个模式,如果不是起...

  • python常用模块!!

    os模块: stat模块: sys模块: hashlib,md5模块: random模块: types模块: at...

  • 2018-08-19

    Angular 2 技能图谱 模块 自定义模块 根模块 特性模块 共享模块 核心模块 内置模块 Applicati...

  • 【时间管理100讲】精髓全在这里啦

    理论模块 精力管理。 行动管理。 学习模块。 高空模块。 反思模块。 运动模块。 阅读模块。 旅行模块。 人际关系...

  • python基础学习(三)

    常用模块 String模块 数学模块 随机模块 OS模块 os.path模块 re模块 常用函数及操作 列表操作 ...

  • day10-异常处理和pygame显示

    一、异常处理 1.模块 导入模块(自定义模块,第三方模块)import 模块 ---->模块.内容from 模块 ...

  • 重点知识复习(异常处理)

    1.模块 导入模块(自定义模块,第三方模块,系统其他模块)import 模块 ----> 模块.内容from 模...

  • Python常用模块

    Python常用模块之time模块 Python常用模块之os模块 Python常用模块之sys模块 Python...

  • nodejs-模块

    nodejs模块 一、nodejs模块分类 1.核心模块 Core Module、内置模块、原生模块 fs模块 p...

  • Python不同网络模块网页源代码的获取

    requests模块 或者使用 selenium模块 BeautifulSoup模块 urllib模块

网友评论

      本文标题:day23-re模块

      本文链接:https://www.haomeiwen.com/subject/siovrktx.html