本文目录:

一、re模块
二、re练习
三、subproces模块

一、re模块

import re

# [] 范围匹配  中间 用-来连接
# re.findall("[a-zA-Z0-9]","a ab abc abcd a123c")
# 如果要匹配 符号- 要写表达式的左边或右边
# print(re.findall("[-ab]","a ab abc abcd a123c a--")) # 重复匹配 表达式的匹配次数
# * 表示 任意次数 所以0次也满足
print(re.findall("[a-zA-Z]*","a ab abc abcdssdsjad a123c"))
# [a-zA-Z]*
# + 一次或多次
print(re.findall("[a-zA-Z]+","a ab abc abcdssdsjad a123c"))
# [a-zA-Z]+
# ? 0次或1次
print(re.findall("[a-zA-Z]?","a ab abc abcdssdsjad a123c")) # {1,2} 自定义匹配次数 {1,} 1到无穷 {,1} 0到1次
print(re.findall("[a-zA-Z]{1,2}","a ab abc abcdsdssjad a123c")) # + * 贪婪匹配 表达式匹配的情况下 尽可能的多拿 (一直匹配 直到不满足为止) # print(re.findall("\w*","jjsahdjshdjssadsa dssddsads"))
# print(re.findall("\w+","jjsahdjshdjssadsa dssddsads"))
# 非贪婪匹配 在表达式的后面加上?
# print(re.findall("\w?","jjsahdjshdjssadsa dssddsads")) # 非贪婪匹配
# text = """<img src="https://ss1.baidu.com/6ONXsjip0@#4$QIZ8tyhnq/it/u=2972240716,3143951157&amp;fm=55&amp;app=22&amp;f=JPEG?w=121&amp;h=81&amp;s=0FB86D855C624C9C0AB1F57203008031" class="c-img c-img6">""" # 演示贪婪匹配
print(re.findall('src="(http.*?)"',text)) # 非贪婪匹配 在表达式的后面加上?
print(re.findall('src="http.*"',text)) # print(re.findall("[a-zA-Z]*","a|ab|abc|abcd|a123c")) # 分组 加上分组 不会改变原来的规则 仅仅是将括号中的内容单独拿出来了
print(re.findall("([a-zA-Z]+)_dsb","aigen_dsb cxx_dsb alex_dsb zxx_xsb _dsb")) # re模块中常用的函数
# match 从字符串开始处匹配 只找一个
print(re.match("\w*","abc").group(0)) # 获取匹配成功的内容
# group 用来获取某个分组的内容 默认获取第0组 就是整个表达式本身
print(re.match("([a-zA-Z]+)(_dsb)","aigen_dsb cxx_dsb alex_dsb zxx_xsb _dsb").group(2))
print(re.match("\w*","abc").span()) # 获取匹配成功的内容的索引 print(re.search("\w*","abc").group())
# 从全文范围取一个
print(re.search("([a-zA-Z]+)(_dsb)","xxx aigen_dsb cxx_dsb alex_dsb zxx_xsb _dsb"))
# 从开始的位置开始匹配
# print(re.match("([a-zA-Z]+)(_dsb)","xxx aigen_dsb cxx_dsb alex_dsb zxx_xsb _dsb").group())
# 将正则表达式 编译成一个对象 往后可以不用在写表达式 直接开始匹配
# print(re.compile("\w*").findall("abcd")) # print(re.split("\|_*\|","python|____|js|____|java")) # 替换
print(re.sub("python","PYTHON","js|python|java"))
# 用正则表达式来交换位置
text = "java|C++|js|C|python"
# text1 = "java|C++|js|C|python"
# 将整个内容分为三块 java |C++xxxxxx| python
partten = "(.+?)(\|.+\|)(.+)"
".+?ahgshags"
# ?:用于取消分组 就和没写括号一样
# partten = "(?:.+?)(\|.+\|)(.+)"
# print(re.search(partten,text).group(0))
print(re.sub(partten,r"\2\3\1",text)) # 当要匹配的内容包含\时
text = "a\p"
"\p" print(text)
print(re.findall(r"a\\p",text))

二、re练习案例

# qq密码  长度6--16   数字字母特殊    不包含^
# 如果包含^ 不匹配任何内容
# 除了^ 别的都能匹配上 "[^\^]{6,16}" import re
# print(re.search("[^^]{6,16}","1234567^as^"))
# print(re.search("[^[\^]+.{6,16}","1234567as")) # print(re.match("[^@]{6,16}","1234567@"))
#
# print(re.match("[a-z]{6,16}","abasadsasasa^"))
# 长度必须为6 不能包含@
print(re.match("^[^^]{6,8}$","1111111^56781111")) # print(re.match("[0-9]{6,7}","1234567"))
# print(re.match("^\"[^@]{6,16}\"$", '"1234567io1u"')) # ^$ 整体匹配 将字符串内容看作一个整体 而不是像之前的逐个匹配
print(re.match("^[^^]{3,6}$","")) # # 手机号码验证 长度11 以1开头 全都是数字
print(re.match("^1(89|80|32)\d{8}$","")) # 邮箱地址验证 字母数字下划线(至少6个)@字母数字下划线(最少一个).(cn com org edu任意一个) 可以有18921999093@189.cn
partten = "^\w{6,}@\w+\.(cn|com|org|edu)$"
# 只接受 qq sina 163 print(re.match(partten,"18921999as dsadsadsadsasdad093@189.cn")) # 身份证号码 要么18 要么15位数字 最后一个可能是X
# partten = "^\d{17}(X|\d)$"
partten2 = "(^\d{15}$)|(^\d{17}(X|\d)$)"
print(re.match(partten2,""))

三、subproces模块

 import subprocess
# 就用来执行系统命令
import os cmd = r'dir D:\python笔记\day23 | findstr "py"'
# res = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# # 从管道中读取数据 管道就是 两个进程通讯的媒介
# # print(type(res.stdout.read().decode("GBK")))
# print(res.stdout.read().decode("GBK"))
# print(res.stderr.read().decode("GBK")) dir = r'dir D:\python笔记\day23'
find = 'findstr "py"'
"""
stdout 输出管道
stdin 输入管道
stderr 错误管道
"""
res1 = subprocess.Popen(dir,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) res2 = subprocess.Popen(find,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=res1.stdout)
# 从管道中读取数据 管道就是 两个进程通讯的媒介
# print(type(res.stdout.read().decode("GBK")))
# print(res1.stdout.read().decode("GBK"))
print(res2.stderr.read().decode("GBK"),"") # 简单总结 subprocess 主要用于执行系统指令 (启动子进程) 与os.system的不同在于
# subprocess 可以与这个子进程进行数据交换

python常用模块:re模块案例、subprocess的更多相关文章

  1. Python常用内建模块

    Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...

  2. python常用内建模块 collections,bs64,struct,hashlib,itertools,contextlib,xml

    #  2  collections 是Python内建的一个集合模块,提供了许多有用的集合类. # 2.1 namedtuple #tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p ...

  3. Python 常用内建模块(time ,datetime)

    1,在Python中,与时间处理有关的模块就包括:time,datetime以及calendar. 2,在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(st ...

  4. python常用命令—查看模块所在位置

    环境:ipython3 交互式解释器 语法: import 模块名 模块名.__file__ 功能: 查看模块的所在位置 例:

  5. python常用函数及模块

    原文来源于博客园和CSDN 1.计算函数 abs()--取绝对值 max()--取序列最大值,包括列表.元组 min()--取序列最小值 len()--取长度 divmod(a,b)---取a//b除 ...

  6. Python 常用内建模块(os, sys,random)

    一.os 模块 1,操作系统与环境变量 import osprint(os.name) #操作系统类型,如果是posix 说明系统是linux unix 或 mac os x :如果是nt 就是win ...

  7. python常用内建模块——datetime

    datetime是python处理日期和时间的标准库. 获取当前日期和时间 >>>from datetime import datetime >>>now = da ...

  8. collections(python常用内建模块)

    文章来源:https://www.liaoxuefeng.com/wiki/897692888725344/973805065315456 collections collections是Python ...

  9. python常用内置模块-random模块

    random模块:用于生成随机数 '''关于数据类型序列相关,参照https://www.cnblogs.com/yyds/p/6123692.html''' random() 随机获取0 到1 之间 ...

  10. Python常用内建模块和第三方库

    目录 内建模块 1  datetime模块(处理日期和时间的标准库) datetime与timestamp转换 str与datetime转换 datetime时间加减,使用timedelta这个类 转 ...

随机推荐

  1. SpringBoot之解决一对一、多对一、多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion)

    前言 这问题着实让人苦不堪言,有必要把它记下了. @JsonBackReference [亲测有效] 1.使用注解@JsonBackReference标记在有关联关系的实体属性上 2.仅导入此注解类有 ...

  2. docker 导出多个镜像合并成一个tar

    导出单个镜像 docker save [images] > [name.tar] 倒出多个镜像合并成一个tar包 docker save [images] [images] > [name ...

  3. 如何使用QTP12 UFT做功能性测试(转载)

    首先,按照本博客的安装教程走的,右键管理员运行 接下来点击继续,这个界面只需要勾选到web即可 点击ok,开始运行 进入到主界面之后,file新建一个测试. 可以修改路径等等 点击create之后,出 ...

  4. 【18.065】Lecture2

    由于这一课的教材放出来了,所以直接将整个pdf放上来.   

  5. PJzhang:在windows10中实现右键命令行快捷打开

    猫宁!!! (windows10---设置---轻松使用---键盘---开启PrtScn快速截图),或者winodws+shift+s kali linux中右键就可以打开终端命令行. 采用手工修改注 ...

  6. pandas中对日期型数据进行处理

    因为数据不方便展示,直接上代码. 将字符串转为datetime64[ns]格式: pd.to_datetime('2019-12-20') or pd.to_datetime('20191220') ...

  7. pyhanlp 繁简转换之拼音转换与字符正则化

    繁简转换 HanLP几乎实现了所有我们需要的繁简转换方式,并且已经封装到了HanLP中,使得我们可以轻松的使用,而分词器中已经默认支持多种繁简格式或者混合.这里我们不再做过多描述. ·说明 · Han ...

  8. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

  9. 详解vue 路由跳转四种方式 (带参数)

    详解vue 路由跳转四种方式 (带参数):https://www.jb51.net/article/160401.htm 1.  router-link ? 1 2 3 4 5 6 7 8 9 10 ...

  10. Python【无引号、单引号、双引号、三引号】

    无引号#数字和数学运算是标准化.有固定格式的>>> print(520) 520>>> print(1+1)2 单引号#文字却能够千变万化>>> ...