• python初学


    安装anaconda

    此模块为转载
    https://blog.csdn.net/m0_64892604/article/details/128806043
    一、创建虚拟环境

    conda create --name env_name
    conda create --name env_name python=3.6 # 创建指定python版本
    conda create --name env_name python=3.6 pandas numpy scipy # 创建指定python版本下包含某些包
    二、激活/使用/进入某个虚拟环境

    conda activate env_name
    三、退出当前环境

    conda deactivate
    四、复制某个虚拟环境

    conda create --name new_env_name --clone old_env_name
    五、删除某个环境

    conda remove --name env_name --all
    六、查看当前所有环境

    conda info --envs 或者 conda env list
    七、查看当前虚拟环境下的所有安装包

    conda list 需进入该虚拟环境
    conda list -n env_name
    八、安装或卸载包(进入虚拟环境之后)

    conda install requests
    conda install xx=版本号 # 指定版本号
    conda install xxx -i 源名称或链接 # 指定下载源
    conda uninstall xxx
    九、分享虚拟环境

    conda env export > environment.yml # 导出当前虚拟环境
    conda env create -f environment.yml # 创建保存的虚拟环境
    十、源服务器管理

    conda当前的源设置在$HOME/.condarc中,可通过文本查看器查看或者使用命令>conda config --show-sources查看。

    conda config --show-sources #查看当前使用源
    conda config --remove channels 源名称或链接 #删除指定源
    conda config --add channels 源名称或链接 #添加指定源
    例如:

    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
    国内pip源

    阿里云 http://mirrors.aliyun.com/pypi/simple/

    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

    豆瓣(douban) http://pypi.douban.com/simple/

    清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

    中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

    十一、升级

    升级Anaconda需先升级conda

    conda update conda
    conda update anaconda
    十二、卸载

    rm -rf anaconda
    十三、批量导出虚拟环境中的所有组件

    conda list -e > requirements.txt # 导出
    conda install --yes --file requirements.txt # 安装
    十四、pip批量导出环境中的所有组件

    pip freeze > requirements.txt
    pip install -r requirements.txt

    变量的定义

    name = ‘王五’
    print(name)
    age = 23
    print(age)

    变量的类型 可以用type查看

    print(type(name))
    print(‘’‘-------------’‘’)
    print(type(age))

    #标识符 :只能由字母,数字,下划线组成,数字不能作为开头,在python中是区分大小写的。
    #关键字, 在命名时不能和关键字相同
    #输出变量
    #输出变量
    print(‘python程序中输出’)
    #输入
    password = input(“请输入密码:”)
    print(password)

    格式化输出

    password = input(“请输入密码:”)
    print(‘您的密码是:%s’ %password)
    t_id = input(“学号:”)
    name = input(“姓名:”)
    print(‘this student number: %s , name:%s’ %(t_id,name))
    number = 1101
    print(‘the number is : %d’ %number)

    多个变量进行赋值

    id,name,age = 1001,‘王五’,20
    print(‘id: %d,姓名: %s,年龄:%d’ %(id,name,age))

    判断

    if else

    ticket = 1
    if ticket == 1:
    print(‘has ticket’)
    else :
    print(“no ticket”)

    elif

    score = 70
    if score >=90 and score<=100:
    print(‘A’)
    elif score >=80 and score < 90:
    print(‘B’)
    elif score >=70 and score <80:
    print(‘C’)

    while 循环

    i = 0
    while i< 5 :
    print("now i is %d " %(i+1))
    print(‘i=%d’ %i)
    i+=1

    for循环

    #需求:将1,2,3,4 进行求和
    sum = 0
    for i in [1,2,3,4]:
    sum+=i
    print(‘sum=%d’ %sum)

    python3 中提供了range() 返回的是一个可迭代对象(类型是对象),不是列表类型 左闭右开

    python2 中返回的实证书列表

    range 一般结合 for 进行使用

    for i in range(5):
    print(i)

    breank 提前退出循环

    for i in range(6):
    print(‘-------’)
    if i ==3 :
    break
    print(i)

    continue 结束本次循环,继续下一次循环

    字符串

    str = ‘hello’

    获取字符串中的指定元素 [0]: 代表索引或者下标 [-1] :获取最后一个字符

    获取字符串长度 len(str)

    字符串的切片

    从某个位置截取到某个位置 str[1:5]

    从某个位置截取到最后 str[1;]

    从开始截取到某个位置 str[:3]

    字符串的内置函数

    str1 = ‘ll’

    find: 检测 str 是否包含 str1 str.find(str1) 如果找到了,返回第一个字符的索引,如果没找到返回 -1

    upper: 将字母转化为大写 str.upper()

    #lower: 将字母转换为小写 str.lower()

    startswith 字符串起始位置是否包含指定字符串

    endswith 字符串结束位置是否包含指定字符串

    count()统计字符串出现的次数

    isdigit 判断是否全是数字

    isalpha 判断是否全是字母

    isalnum 检测字符串是否包含数字和字母

    字符串的遍历

    enumerate :将一个可遍历的数据对象(如列表,字符串,元组)组合为一个索引序列,同时返回数据和数据的下标(一般用在for循环)

    str = ‘hello’
    for index ,value in enumerate(str):
    print(index,value)

    列表

    定义: 是一种有序集合,可以进行添加或者删除,定义的时候方括号之内的,元素之间是用逗号分隔,

    列表中的数据类型未必是相同的

    listm = [1,1.2,‘abc’,True]

    #切片 ,使用切片前后数据类型不改变
    print(listm[0:2]) # 左闭右开

    #增删改查
    #空列表
    mylist = list()
    #元素的添加
    mylist.append(3)
    #指定位置插入
    mylist.insert(0,‘a’)
    #列表合并
    mylist1 = [‘c’,‘d’]
    mylist.extend(mylist1)
    #列表修改
    mylist1[0] = 1
    #删除指定的数据
    mylist1.remove(‘d’)
    #删除指定位置的数据
    del mylist1[0]
    #清空列表
    mylist1.clear()

    遍历列表

    for vlaue in mylist1:
    print(value)

    判断列表中是否存在某个元素

    3 in mylist1

    判断列表中是否不存在某个元素

    3 not in mylist1

    嵌套列表

    元组

    注意:是不能修改,删除的,元组使用的是小括号,其他的和列表相同

    mytuple = (1,2,‘abc’,True)

    tuple 中嵌套列表

    mytuple = (1,2,[3,4])

    可以修改其中列表的值

    如果tuple 只有一个元素,需要末尾加上 , tuple1=(1,)

    练习小案例

    1 ,两数相加
    num1 = input(“请输入一个数字:”)
    num2 = input(“请输入一个数据:”)
    sum = int(num1)+int(num2)
    print(‘和:%d’ %sum)

    #乘法口诀表

    for i in range(1,10):
        for j in range(1,i+1):
            print('{}*{}={} \t'.format(i,j,i*j) , end ='')
        print()
    
    • 1
    • 2
    • 3
    • 4

    生成随机数

    import random

    生成0-9的整型随机数

    random.randint(0,9)

    生成一个0-1之间的浮点随机数

    random.random()

    字典 : 键值对

    mydict = {‘name’:‘wang’,‘age’:22,‘sex’:‘men’}

    获取字典中的value

    print(mydict[‘name’])
    print(mydict.get(‘name’))

    创建一个空字典

    dict1 = {}
    dict2 = dict()
    print(dict1)
    print(dict2)

    添加元素

    dict1[‘userName’] = ‘wang’
    dict2[“password”] = ‘zi’

    修改

    dict1[‘userName’] = ‘jian’

    删除

    mydict.pop(“sex”)
    del mydict[‘age’]

    清除

    mydict.clear()

    判断 key 是否在字典中

    ‘age’ in mydict

    获取字典中的所有值

    mydict.values()

    获取字典中的所有key

    mydict.keys()

    遍历

    for key in mydict:
    print(key)
    print(mydict[key])

    for key,value in mydict:
    print(key, value)

    集合 set : 无序的不重复的序列

    myset = {1,2,4,‘abc’}
    #定义空集合
    myset2 = set()

    集合遍历

    集合去重

    mylist = [1,1,1,2,2,3,3,3]
    myset3 = set(mylist)
    print(myset3)

    函数: 将独立功能的代码块祖志成一个独立的小模块

    语法:

    def 函数名 (参数【可选】):

    功能代码

    pass 表示该函数什么也不做

    函数的文档说明

    def show(num1):
    ‘’’
    函数的功能:
    参数 :
    ‘’’
    print(num1)

    help(show)

    函数的几种类型

    无参数,无返回值

    def show():
    print(‘hello word’)

    有参数没返回值

    def show(name,age):
    print(name,age)

    无参数,有返回值

    def show():
    str1 = ‘hello world’
    return str1

    有参数,有返回值

    def show(name,age):
    str1 = ‘hello %s world %d’ %(name,age)
    return str1

    注意

    #1.两个函数名相同时,下面的函数会覆盖上面的函数
    #2,函数名也不要和变量名相同

    缺省参数

    针对两个数字进行求和

    def sum_num (num1,num2):
    result = num1+num2
    return result

    定长参数个数

    def sum_num (num1=1,num2=2):
    result = num1+num2
    return result
    print(sum_num(1))

    不定长参数: 不定长必选参数, 不定长关键字参数

    不定长必选参数 (*args)

    def sum_num3(*args):
    print(type(args))
    result = 0
    for value in args: # 遍历元组
    result += value
    return result
    re = sum_num3(2,3,4,5)
    print(re)

    不定长关键字参数(**kargs)

    def sum_num4 (**kargs):
    print(type(kargs))
    for key,value in kargs.items(): #遍历字典
    print(key,value)

    sum_num4(num1=1,num2=2)

    局部变量: 函数定义在作用域内的变量

    和全局变量不同的是作用域的范围

    num = 100
    def show():
    global num #修改全局变量通过 global 关键字
    num =10
    print(num)
    show()
    print(num)

    匿名函数

    使用lambda 关键字定义

    #创建 和调用

    a,b,c 形式参数

    1,2,3 实际参数

    result = (lambda a,b,c : a+b+c)(1,2,3)
    print(result)

    面向对象

    类的定义

    class Teacher(object):
    #定义属性
    country = ‘China’
    #方法
    def show(shef):
    print(“Teacher”)

    根据类来创建对象

    teacher = Teacher()
    #获取对象属性
    print(teacher.country)
    #teacher.show()
    #查看 类继承的父类
    print(Teacher.base)

    通过对象进行动态的属性添加

    teacher.name = ‘zs’
    teacher.age = 20

    修改属性: 前提是有这个属性,没有就是添加属性了

    teacher.name = ‘ls’
    print(teacher.name,teacher.age)

    self

    class Cat(object):
    def eat(self):
    print(‘%s eating’ %self.name)

    c1 = Cat()
    c1.name = ‘c1’
    c1.eat()

    init() 初始化

    class Teacher(object):
    def init(self,name ,age):
    self.name = name
    self.age = age

    def show(self):
        print("teacher")
    
    • 1
    • 2

    t1 = Teacher(‘zs’,20)
    print(t1.name,t1.age)
    t1.show()

    继承

    注意:

    1. 如果一个类A中的属性和方法可以复用,则可以通过继承的方式,传递到类B中

    2. 类A 就是 基类,即父类,类B就是派生类 ,即子类

    #3. 子类可以继承父类的属性和方法
    #单继承:子类只继承一个父类
    #优点: 子类可以直接使用父类的属性和方法

    父类

    class Person(object):
    def init(self,name ,age):
    self.name = name
    self.age = age

    def show(self):
        print(self.name,self.age)
    
    • 1
    • 2

    子类

    class Student(Person):
    pass
    stu = Student(‘zs’,20)
    print(stu.name,stu.age)
    stu.show()

    多继承

    class A (object):
    def show(self):
    print(“A”)

    class B (object):
    def show(self):
    print(“B”)

    class C (A,B):
    pass
    c = C()
    c.show()

    类的执行顺序

    print(C.mro())

    重写定义: 子类可以继承父类,父类中的方法满足不了子类的需求,可以对父类的方法进行重写

    父类

    class Person(object):
    def init(self,name ,age):
    self.name = name
    self.age = age

    def show(self):
        print(self.name,self.age)
    
    • 1
    • 2

    子类

    class Student(Person):
    def init(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex

    def show(self):
        print('my name is %s  age is %d sex is %s'% (self.name,self.age,self.sex))
    pass
    
    • 1
    • 2
    • 3

    stu = Student(‘zs’,20,‘men’)
    stu.show()

    私有方法 和私有属性

    class Student(Person):
    def init(self,name,age,sex):
    # 公有属性
    self.name = name
    self.age = age
    # 私有属性: 是以两个下划线定义的 __ ,只能在本类内部使用,在类外面不能使用
    self.__sex = sex

    def show(self):
        print('my name is %s  age is %d sex is %s'% (self.name,self.age,self.__sex))
    
    • 1
    • 2

    stu = Student(‘zs’,20,‘men’)
    stu.show()

    多态

    多态: 不同的子类对象调用相同的父类方法,产生不同的执行结果,优点,增加代码外部的灵活性

    多态形成的前提 :1.继承, 2,重写父类方法

    #Animal
    class Animal(object):
    def run(self):
    print(“Animal run”)

    class Dog(Animal):
    def run(self):
    print(“Dog run”)

    class Cat(Animal):
    def run(self):
    print(“Cat run”)

    def run_two(animal):
    animal.run()
    animal.run()

    dog = Dog()
    cat = Cat()
    run_two(dog)
    run_two(cat)

    异常 :程序运行出错,就会向上抛出,直到某个函数可以处理该异常,每种语言都有 try catch

    try:
    print(num)
    except Exception as e:
    print(‘有异常出现时执行里面的代码’)
    print(e)

    print(“不影响后面代码的执行”)

    while True:
    str1=input(‘number’)
    try:
    num = int(str1) +1
    except Exception as e :
    print(‘exception’)
    print(‘%qconsole input again’)
    else:
    print(‘no error’)
    finally:
    print(‘finally’)

    模块: 通俗来讲就是一个 .py 文件,就是一个模块,作用:管理功能代码,在代码里面可以定义变量,函数,类

    自定义模块 导入别人或者自己封装好的功能 py文件

    import first_module

    print(first_module.g_num)
    stu = first_module.Student(‘zs’,20)
    stu.show_msg()

    import first_module

    from 模块名 import 方法名,类名

    from first_module import show
    from first_module import Student
    show()
    Student(‘ZS’,20)

    from 模块名 import * 导入模块下所有的功能代码, 不推荐使用

    文件读写

    #1.打开文件
    #2.对文件进行操作(读,写)
    #3,关闭文件

    #打开方式
    #r: 只读,文件不存在程序会崩溃,出现文件不存在异常
    #w:只写,只会讲原来的内容进行覆盖掉,如果文件不存在,会创建一个文件
    #a: 追加写入
    #b:标识二进制的形式 常用rb: 以二进制方式打开一个文件用于只读, wb: 以二进制方式打开一个文件用于只写

    w模式

    打开文件

    encoding 指定编码格式, win写入是需要指定的,win中默认的是cp936 -》GBK

    f = open(“./text.txt”,‘w’,encoding=‘utf-8’)

    操作文件

    注意: 文件被打开之后,多次写入数据不会覆盖之前的数据

    f.write(‘ABC’)
    f.write(‘工程师’)

    关闭文件

    f.close()

    给模块起别名

    from first_module import show as show_msg
    show_msg()
    def show():
    print(‘hello student’)
    show()

    r 模式

    f = open(‘./text.txt’,‘r’,encoding=‘utf-8’)

    读取数据

    content = f.read()

    关闭

    f.close()

    a 模式

    f = open(‘./text.txt’,‘a’,encoding=‘utf-8’)
    f.write(‘bcd’)
    f.close()

    rb 模式,二进制方式读取

    注意:带有b 的模式都是二进制的模式,在这种模式下,不管什么系统,都不要添加encoding参数

    f = open(‘./text.txt’,‘rb’)
    content = f.read()
    print(content,type(content))

    对二进制的数据进行 utf-8 解码操作,将bytes类型的数据转换为 str 类型

    result = content.decode(‘utf-8’)
    print(result)

    将str 转换为 bytes编码

    print(result.encode(‘utf-8’))
    #关闭
    f.close()

    定义一个列表,并按照降序排序

    mylist = [1,4,2,5,6,3,9]

    reverse =True 表示降序,不写表示升序

    mylist.sort(reverse=True)
    print(mylist)

    判断是否为偶数

    普通函数

    def is_os(num):
    if num%2==0:
    return True
    else :
    return False
    print(is_os(7))

    #匿名函数
    f = lambda num:True if num %2 ==0 else False
    re = f(3)
    print(re)

    如何使用匿名函数对字典中的列表进行排序

    mylist =[{‘name’:‘zs’,‘age’:20},{‘name’:‘ls’,‘age’:10},{‘name’:‘ws’,‘age’:21}]
    #mylist.sort(key = lambda item : item[‘age’],reverse=False)
    #print(mylist)

    #普通函数
    def get_value(item):
    return item[‘age’]
    mylist.sort(key=get_value,reverse=True)
    print(mylist)

    利用 python 进行文件 拷贝

    打开两个文件,源文件 ,目标文件

    oldfile = open(‘./source.txt’,‘rb’)
    newfile = open(‘./target.txt’,‘wb’)

    #文件操作
    while True:
    filedata = oldfile.read(1024) # 1024: 读取1024字节的数据
    # 判断是否读取完成
    if len(filedata) == 0:
    break
    newfile.write(filedata)

    关闭文件

    oldfile.close()
    newfile.close()

    定义类class 为Book ,定义 init 函数和自定义函数

    class Book(object):
    def init(self,name=‘jueji’,price= ‘39’,author =‘gjm’):
    self.name = name
    self.price = price
    self.author =author
    def you(self):
    print(‘sutdy hard %s book’ %self.name)
    def info(self):
    print(‘bookname:%s ,jiage: %s , zuozhe: %s’ %(self.name,self.price,self.author))

    class BookZi(Book):
    pass

    fu = Book(“shazi”,“100”,“gjm”)
    fu.you()
    fu.info()
    zi = BookZi(‘ershazi’,“1000”,“gjm”)
    zi.info()

    使用正则表达式,匹配字符串

    import re
    str1 = ‘abc 123 def’

    ^ 表示 开始

    \s 表示任意空白或者空格

    \d 表示一个数字

    \w 表示一个字母

    \d{3} 表示三个数字

    .* 表示匹配任意

    (.*) 表示匹配第几个

    $ 表示字符串结束

    group() 表示匹配结果 小括号里不写默认是 0 ,如果写了没有会报错

    print(re.match('^abc\s\d\d\d\sdef$',str1).group())
    print(re.match('^abc\s\d{3}\sdef$',str1).group())
    print(re.match('^abc\s.*\sdef$',str1).group())
    print(re.match('^abc\s(.*)\sdef$',str1).group(1))
    
    • 1
    • 2
    • 3
    • 4

    使用正则表达式中 sub 实现获取匹配的字符串,然后追加指定字符

    import re
    str1 = ‘hello 7709 66 aa 77 student’

    + 表示有多个

    \1 表示匹配的第一个结果

    r 表示不对任何字符进行转义

    content = re.sub(‘(\d+)’,r’\1 789’ , str1)
    print(content)

    以下部分为转载
    https://blog.csdn.net/evehaoeve/article/details/119093894

    三种括号的含义 [ ], { }, ( )

    1. 中括号[ ]: 匹配 单个字符 是否属于中括号中的一个字符
      字符串: hello world!!
      js正则表达式: /[eor]/g
      匹配到的内容是: h e ll o w o r ld
      中括号中有两个特殊, 连接符号 - 和 取反符号 ^
      连接符 - 根据ASCII表的值 从小到大 中间的范围 (左边ASCII值必须小于右边ASCII的值)
      [0-9] 表示 0到9 之间的数 包括 0 和 9
      [3-6] 表示 3到6 之间的数 包括 3 和 6
      [a-z] 表示 a-z 之间所有的字母 包含 a 和 z
      [A-Z] 表示 A-Z 之间所有的字母 包含 A 和 Z
      [0-9A-Z] 表示 0 到 9 和 大写A 到 大写 Z 中间所有字符
      [!-/] 表示 ASCII 表中 ! 到 / 之间的所有字符 包含 ! 和 / 字符
      取反符号 ^ 紧跟在^后的一个字符, 则不匹配
      [^a] 表示不匹配 a 字符
      [^abc] 表示不匹配 a 字符
      [^] 表示不匹配 ^ 和 \ 字符
      [^4-5] 表示不匹配 4 到 5 之间的数字包括 4 和 5 也不匹配
      [b-d1-3^5] 表示不匹配b c d 1 2 3 5 这几个字符
      值得一提, 中括号中的特殊符号也会认为是字符 比如 <>, (), {} 都会被看作字符的括号而非特殊含义,
      ^ - \ 这个三个特殊符号保留特殊含义, 想要匹配^ - \ 则使用^, -, \
    2. 大括号{ }, 用于重复次数, 大括号左边表达式的匹配次数
      字符串: hello world!!
      js正则表达式: /l{2}/g
      匹配到的内容是: he ll o world!!
    3. a{1, 4} 匹配 a 字符 1 到 4次 如 a aa aaa aaaa
    4. [0-9]{3} 匹配连续 3 个数字
    5. [a-z]{1,} 匹配小写字母字符 1次到无数次
    6. [a-z]{,5} 匹配小写字母字符 最多5次
    7. 小括号( ), 表示一个子表达式
      字符串: hello world!!
      js正则表达式: /(ell)/g
      匹配到的内容是: h ell o world!!
      此处注意, 如果字符串是helo 则是匹配不到任何内容的
      小括号中的内容是一个完整的正则表达式
    8. (ha){2} 匹配 内容为haha
    9. ((ha){2} hello) 匹配到的内容为: haha hello
    10. (a | b){2} 能够匹配到的内容为 aa bb ab ba
      子表达式可以很复杂, 这样多个子表达式组合起来, 可以匹配出规则很复杂的字符串
      补充
      (?=), (?!), (?<=), (?

    正则表达式 4种预查的作用

    (?=pattern) (?!pattern) (?<=pattern) (? 刚开始学习正则表达式的时候看着最蒙逼的4个表达式, 小括号中带着问号, 一脸蒙逼不知道是写的
    啥, 也没整明白效果是啥. 后来终于在不断的看文档和尝试, 总算是搞明白了
    预查表达式
    预查表达式主要功能是起到 判断作用 , 类似于编程中的 if 判断语句, 判断当前匹配字符的左右内容是
    什么, 并且符合预查表达式内容的内容 不会被获取 .
    在我们要匹配一些字符串的时候, 通常有些内容我们不需要匹配获取, 但是可以作为参考, 这个时候就
    可以使用预查表达式了. 例: 获取所有 括号之间的内容不包含括号 , 所有 双引号之间的内容 等.
    方向
    预查表达式可以看到有两个方向, 正向 和 反向. 通俗来说就是 当前字符判断位置 的 右边 和 左边.
    4种表达式中 < 用来描述向左(反向), 没有 < 表示向右(正向)
    当然这种写法也是固定的, 比如你写个(?<<=)就报错了.
    肯定 和 否定
    肯定用 = 号描述, 否定用 ! 号描述
    这两种含义最简单的理解就是 是 和 不是
    bcd(?=123) 表示 获取 bcd 字符串并且该字符串右边一定是 123 字符串.
    能匹配到bcd123
    bcd(?!123) 表示 获取 bcd 字符串, 并且该字符串右边一定不是 123
    所以匹配到的内容一定不是bcd123, 可以是bcdasd, bcdbcd, bcd123… 反正bcd右边不是123的
    都行
    各种刁钻的例子

    1. (?=abc)a 表示 获取 a 字符串, 并且从a字符串左边开始向右 为 abc
      等统于 a(?=bc), 因为是从a字符左边开始向右, 所以会包含a字符.
    2. (?<=123)abc 表示 获取字符串abc, 并且abc字符串的左边一定是123字符串
    3. abc(?<=123) 表示 获取字符串abc,并且从c字符右侧向左3个字符的字符串一定是123
      因为c字符右侧开始向左3个字符和abc重叠了, 所以这个是表达式匹配不到任何字符串.
    4. (?<=123)abc 表示 获取字符串abc, 并且从字符a左边开始向左3个字符一定是123.
      字符串123abc 满足条件匹配成功, 并获取到的字符串是abc
      正常一点的例子
    5. (?<= ).)*(?=)) 获取所有小括号中的内容
      字符串 (aa)test(bb)test2(cc)test3(dd) 获得内容为4个字符串 aa bb cc dd
    6. (?<=“)\w*(?=”) 获取双引号之间的字符串
  • 相关阅读:
    【生日快乐】SpringBoot SpringBoot 提高篇(第二篇) 第5章 SpringBoot 日志 5.3 SpringBoot 的日志使用
    入侵检测代码
    alpha-beta剪枝
    kube-scheduler framework
    spring
    「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」
    危险的粒子 马蹄集
    EN 14509自支撑双层金属面保温绝热夹芯板—CE认证
    【高等数学基础进阶】函数、极限、连续-补充+练习 & 导数与微分-练习
    不要再把数据可视化搞成表面工程,论数据可视化的正确逻辑
  • 原文地址:https://blog.csdn.net/Logan_addoil/article/details/132724473