正则表达式-python

倖福魔咒の 提交于 2020-02-27 18:18:56

正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的

这样的字符序列相匹配

快速检索文本、实现一些替换文本的操作

 

1.检查一串数字是否是电话号码

2.检测一个字符串是否符合Email

3.把一个文本里指定的单词替换为另一个单词

#查找字符串 re.findall
import re
a='C7C++5Java8C#2python0Javascript'
#检测字符串中的指定字符
r=re.findall('python',a)#正则表达式,检测a中是否有字符串python
if len(r)>0
    print('字符串中包含python')
else:
    print('NO')
#检索字符串a中所有数字
r=re.findall('\d',a)#元字符'\d'表示数字0-9,
print(r)
#检测字符串中的非数字
r=re.findall('\D',a)#元字符'/D'表示非数字
print(r)

s='abc,acc,adc,aef,afc,ahc'
#抽象字符集
r=re.findall('a[cf]c',s)#抽象c或f,得出acc或afc
print(r)
re=re.findall('a[^cf]c',)
#概括字符集
r=re.findall('\w',a)#\w匹配所有数字和字母
print(r)
re=re.findall('\s',a)#\s匹配空白字符
#数量词-默认贪婪模式
a='python 111 java678php'
r=re.findall('[a-z]{3,6}',a)#提取python、java、php,提取3-6个字符为一个
#非贪婪--+'?'
r=re.findall('[a-z]{3,6}?',a)#提取pyt,hon,jav,php
# *前字符可以出现0次或无限多次  +匹配日1或无限多次  ?匹配0次或1次  .匹配换行符之外所有其它字符
a='pyth0python1pythonn2'
r=re.findall('python*',a)#匹配 pytho,python,pythonn *前的字符n可以出现0次或多次
#边界匹配
qq='100001'
#要求QQ号是4~8位  ^表示从开始匹配  $表示从末尾匹配
r=fe.findall('^\d{4,8}$',qq)
print(r)
#组 []或关系  ()且关系
a='pythonpythonpythonpythonpython'
r=re.findall('(python){3}',a)#重复匹配三次字符串python
#第三个模式 re.I匹配除换行式所有字符,无视大小写   re.S匹配所有字符,无视大小写
a='PythonC#\nJavaPHP'
r=re.findall('c#.{1}',lanuage,re.I| re.S)#忽略大小写 | 表示且关系 不是或
#re.sub   第二个参数也可以是函数
import re
lanuage='PythonC#JavaC#PHPC#'
r=re.sub('C#','GO',lanuage,1)#字符串中 C#被替换成GO,1表示只能被换第一个
lanuage=lanuage.replace('C#','GO')#所有C#被替换成GO
def convert(value):#定义函数 convert
    pass
r=re.sub('C#',convert,lanuage,1)#字符串第一个C#消失,把参数1去掉,所有C#消失
print(r)
#函数作参数,第二个例子
def convert(value):
    matched = value.group()
    return '!!'+matched+'!!'
r=re.sub('C#',convert,lanuage)
print(t)#Python!!C#!!Java!!C#!!PHP!!C#!!
#
#大于等于6的数字替换为9,小于6的数字替换为0
import re
s='A8C3721D86'
def convert(value):
    matched=value.group()
    if int(matched)>=6:
        return '9'
    else:
        return '0'
r=re.sub('\d',convert,s)
print(r)#A9C0900D99
#剩下两个re方法,  re.match  re.search 匹配成功后结束匹配,即只能匹配一次 findalll则匹配所有
r=re.match('\d',s)#match 从字符串首开始匹配,如果首字母不符合要求,则找不到
r1=re.search('\d',s)#search 搜索字符串
print(r.span())
print(r1.group())
#有很多更适合自己的方式表达,适合自己的方法是最有用的方法
import re
s='life is short,i use python'
r=re.search('(life.*python)')
print(r.group())#匹配整个字符串
r=re.findall(life(.*)python)
print(r)
#善于使用正则表达式,搜索常用正则表达式
JSON ( JavaScript Object Notation ) JavaScript对象标记
是一种轻量级的数据交换格式 字符串是JSON的表现形式

import json
json_str='{"name":"wzt","age":20}'#json规范:字符串要用双引号
#json.loads() 这个方法可以把json字符串转化为python数据结构
student=json.loads(json_str)
print(type(student))#dict 字典类型
print(student)#{'name':'wzt','age':20}
print(student['name'])#wzt
print(student['age'])#20
#如果JSON是数组
#字符串到语言数据结构的过程称为  反序列化
json_str='{{"name":"wzt","age":20},{"name":"wql","age":21}}'#JSON数组
print(type(student))#list 列表类型
print(student)
#序列化 字典向字符串转换过程
#
import json
student = [
            {'name':'wzt','age':20}
          ]
json_str=json.dumps(student)
print(type(json_str))
print(json_str)

json  python    json对应python类型
object     dict
array      list
string      str
number     int
number     float
true          Ture
false     False
null          None
python的高级语法与用法
from enum import Enum#枚举
class VIP(Enum):
    YELLOW=1
    GREEN=2
    BLACK=3
    RED=4
print(VIP.YELLOW)#打印枚举类型显示YELLOW而不是1

class Common():#普通类
    YELLOW=1
print(VIP.YELLOW.name)#打印vip.YELLOW,是字符串类型
#枚举类型不支持大小比较,只支持等值比较 
#两个枚举类型数值相同,则只能打印第一个枚举类型,另一个为第一个的别名

#函数式编程
#闭包=函数+环境变量  ???
def curve_pre():
    a=25
    def curve(x):
        return a*x*x
    return curce
a=10
f=curve_pre()
print(f._closure_)
print(f(2))#100

def f1():
    a=10
    def f2():
        a=20#此时a是局部变量,不影响外部变量
        print(a)#20
    print(a)#a=10
    f2()#执行f2() a=20
    print(a)#全局变量a=10
f1()#执行f1()
#匿名函数
def add(x,y):#普通函数
    return x+y
add(1,2)#调用普通函数
f=lambda x,y:x+y#匿名函数,赋值给变量
print(f(1,2))#调用
#三元表达式 r = x if x > y else y 
#class map
list_x = [1,2,3,4,5,6,7,8]
def square(x):
    return x*x
for x in list_x:
    square(x)
r=map(square,list_x)#普通函数调用

r=map(lambda x: x*x+y,list_x,list_y)#匿名函数建立与使用
print(list(r))
#连续计算,连续调用lamdba 第一次lambda结果作为下次参数
from funtools import reduce
list_x = [1,2,3,4,5,6,7,8]
r=reduce(lambda x,y:x+y,list_x)
print(r)#(((1+2)+3)+4)+5
#filter
list_x=[0,1,0,0,1]
#把数值为0的剔除掉
filter(lambda x: True if x==1 else False,list_x)
print(list(r))#
#装饰器 只是一种模式 对原来函数功能增加,又不修改原函数 一个函数可增加多个装饰器
import time
#def f1():
 #   print(''This is a function)
#def print_current_time(func):
 #   print(time.time())
  #  func()
#print_current_time(f1)
def decorator(func):
    def wrapper(*args):#如果被装饰函数需要输入参数,wrapper需要填写形参,*args为可变参数
        print(time.time())
        func()
    return wrapper
#f=decorator(f1)
@decorator   #@+装饰器名字 然后再弄个函数f1(),则给函数f1增加装饰器中的功能
def f1(func_name):#被装饰函数前需要@装饰器
    print(''This is a function)
f1(c)#功能有输出该字符串+显示时间(修饰器内的功能)

原生爬虫:

#1.抓取明确目的  2.找到数据对应的网页  3.分析王爷的结构找到数据所在的标签位置
#模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML
#用正则表达式提取需要的数据(主播名字。人气)
#正式开始
from urllib import request
class Spider():
    url = ""#url,网址
    def _fetch_content(self):
        request.urlopen(Spider.url)#抓取网页url
        htmls=r.read()
   def go(self):
       self.__fetch_content()
       
spider=Spider()
spider.go()

寒假的存档

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!