1,re模块
import re
re_obj = re.compile('\d{3}')
re_obj.fullmatch('234')
re_obj.search('jshdfjk238jhskfskdf890')
re.fullmatch('\d{3}', '234')
re.search('\d{3}', 'jshdfjk238jhskfskdf890')
result = re.fullmatch(r'(\d{3})-([a-z]{2})', '897-yu')
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.span())
print(result.span(2))
print(result.string)
re_str = r'\d{3}'
print(re.fullmatch(re_str, '278'))
print(re.match(re_str, '234hjjh考核科技哈弗23'))
print(re.search(re_str, '史蒂芬霍金看2940数控889刀具ss'))
print(re.findall(r'\d{3}', '史蒂芬653霍金看2940数控889刀具ss'))
print(re.findall(r'\d{2}-[A-E]{2}', '是否23-ABss试试9223-CB;sd00-AA--009'))
print(re.findall(r'(\d{2})-[A-E]{2}', '是否23-ABss试试9223-CB;sd00-AA--009'))
print(re.findall(r'(\d{2})-([A-E]{2})', '是否23-ABss试试9223-CB;sd00-AA--009'))
result = re.finditer(r'(\d{2})-([A-E]{2})', '是否23-ABss试试9223-CB;sd00-AA--009')
for x in result:
print(x.group(), x.group(1), x.group(2))
str1 = '送积分换23水电费29束带结发0圣诞节发货891数据'
result = str1.replace('23', '+')
result = result.replace('29', '+')
print(result)
result = re.sub(r'\d+', '+', str1)
print(result)
sentence = '你丫是傻 叉吗? 我操你大爷的. F u c k you.'
result = re.sub(r'(?i)傻\s*(叉|b|B|瓜)|f\s*u\s*c\s*k|操|sb', '*', sentence)
print(result)
sentence = '数据库烦得很a上课的飞机和a双方都客家话b是开放和c双方都好看和'
result = re.split(r'[a-c]', sentence)
print(result)
2,忽略大小写和单行匹配
import re
print(re.fullmatch(r'(?i)123[a-z]', '123M'))
print(re.fullmatch(r'123[a-z]', '123K', flags=re.I))
"""
多行匹配的时候:.不能匹配换行 (默认)
单行匹配的时候:.可以匹配换行
方法一:在正则表达式的最前面加 (?s)
"""
print(re.fullmatch('123.abc', '123\nabc'))
print(re.fullmatch('(?s)123.abc', '123\nabc'))
print(re.fullmatch('123.abc', '123\nabc', flags=re.S))
print(re.fullmatch('(?is)123.abc', '123\nABC'))
print(re.fullmatch('123.abc', '123\nABC', flags=re.S | re.I))
3,认识类和对象
"""
语法:
class 类名:
类的说明文档
类的内容
说明:
class - 关键字;固定写法
类名 - 程序员自己命名
要求:标识符,不是关键字
规范:驼峰式命名并且首字母大写;见名知义(看见名字大概知道是个什么类);不使用系统的命名
类的说明文档 - 上个双引号开头和结尾的注释
类的内容 - 主要包含类中的属性和方法
属性分为:类属性(字段)和对象属性
方法分为:对象/实例方法、类方法和静态方法
注:方法就是定义在类中的函数
"""
class Student:
"""学生类"""
pass
stu1 = Student()
print(stu1)
stu2 = Student()
print(stu2)
4,对象方法
"""
定义:直接定义在类中函数就是对象方法
怎么调用:要通过对象来调用 - 对象.方法名()
特点:自带参数self,而且参数self在调用的时候不需要传参,系统会自动将当前对象传给self(谁调用self就指向谁)
"""
class Person:
def eat(self):
print(f'self:{self}')
print('吃饭')
def sleep(self, time):
print(f'睡了{time}小时')
p = Person()
print(f'p:{p}')
p.eat()
p.sleep(23)
p.sleep(time=10)
5,初始化方法和构造函数
class Dog:
def __init__(self):
print('init被调用')
dog1 = Dog()
dog2 = Dog()
class Cat:
def __init__(self, name, age=3):
print('猫的init', name, age)
c1 = Cat('小花', 7)
c2 = Cat('小白')
c3 = Cat(name='花花', age=2)
6,属性
"""
怎么定义:直接定义在类中的变量就是类属性
怎么使用:通过类使用 - 类.类属性
什么时候用:属性值不会因为对象不同而不一样, 例如圆的圆周率
"""
"""
怎么定义:以'self.属性名=值'的形式定义在类中__init__方法里面
怎么使用:通过对象使用 - 对象.属性
什么时候用:属性值会因为对象不同而不一样,就定义成对象属性
"""
class Person:
a = 10
b = 'abc'
def __init__(self):
self.name = '小明'
self.age = 18
self.gender = '男'
print(Person.a, Person.b)
Person.a = 100
print(Person.a * 2)
p1 = Person()
print(p1.name, p1.age, p1.gender)
p1.name = '小花'
print(p1.name, p1.age, p1.gender)
p2 = Person()
p2.name = '小红'
p2.age = 20
p2.gender = '女'
class Student:
def __init__(self, name1, tel1='110'):
self.name = name1
self.study_id = '000'
self.tel = tel1
stu1 = Student('小明')
print(stu1.name)
stu2 = Student('小红')
print(stu2.name)
class Rect:
def __init__(self, l=10, w=10):
self.length = l
self.width = w
def area(self):
print(f'面积:{self.width * self.length}')
def perimeter(self):
print(f'周长:{(self.length + self.width) * 2}')
r1 = Rect(10, 20)
r2 = Rect(10, 100)
r1.area()
r2.area()
r1.perimeter()