一:re模块       处理正则表达式的模块,正则表达式就是一些带有特殊含义的符号或者符号的组合。

作用:对字符串进行过滤,在一堆字符串中找到你所关心的内容,你就需要告诉计算机你的过滤的

规则是什么样的,通过什么方式来告诉计算机,就通过正则表达式。

正则表达式的各种符号所表示的含义  (注:re模块的内部实现不是python,而是调用了c库)

举例说明:

import  re

src='abc_defa 34_h\na'

print(re.findall('a',src))               # ['a', 'a', 'a']

print(re.findall('\w',src))             # \w匹配字母数字下划线     ['a', 'b', 'c', '_', 'd', 'e', 'f', 'a', '3', '4', '_', 'h', 'a']

print(re.findall('\W',src))            # \W匹配非字母数字下划线   [' ', '\n']

print(re.findall('\s',src))             # \s匹配所有不可见字符      [' ', '\n']

print(re.findall('\S',src))            # \S匹配所有可见字符       ['a', 'b', 'c', '_', 'd', 'e', 'f', 'a', '3', '4', '_', 'h', 'a']

print(re.findall('\d',src))            #\d匹配任意数字,等价于[0-9]             ['3', '4']

print(re.findall('\D',src))           #\D匹配任意非数字            ['a', 'b', 'c', '_', 'd', 'e', 'f', 'a', ' ', '_', 'h', '\n', 'a']

print(re.findall('\n',src))           #\n只匹配换行符            ['\n']

print(re.findall('.',src))             # .  除了\n以外的任意字符     ['a', 'b', 'c', '_', 'd', 'e', 'f', 'a', ' ', '3', '4', '_', 'h', 'a']

像\s  \w  \d都是匹配单个字符,如果匹配重复字符

*       +       ?   {}

例:

print(re.findall('\d*','1 12 aa bb'))      #  *  前面的表达式出现0次或任意次    ['1', '', '12', '', '', '', '', '', '', '']

print(re.findall('\d+','1 12 333 aa bb'))    #  + 重复1次或多次    ['1', '12', '333']

print(re.findall('\d?','aa bb a1c 1c1'))       #  ? 表示重复0次或1次   ['', '', '', '', '', '', '', '1', '', '', '1', '', '1', '']

print(re.findall('\d{1,3}','aa bb a1c 1c11'))   #  {m,n}手动指定重复次数,最少m次,最多n次        ['1', '1', '11']

print(re.findall('[a-z]{3}','a aa aaa aaaa'))    #{m}  必须是m次          ['aaa', 'aaa']

print(re.findall('[a-z]{,3}','a aa aaa aaaa'))    #{,m}最大m次        ['a', '', 'aa', '', 'aaa', '', 'aaa', 'a', '']

匹配范围    |       []

例:

print(re.findall('1|0|2','1982asds'))            # a|b  匹配a或b   ['1', '2']

print(re.findall('[012]','1982asds'))         #[abc] 用来表示一组字符,单独列出,[abc] 匹配‘a’  'b'或‘c’    ['1', '2']

例子:找出所有的数字和字母  (注:减号只有在两个字符中间才有范围的意思,在两边都是普通字符)

print(re.findall('[0-9a-zA-Z]','1982asds'))      #['1', '9', '8', '2', 'a', 's', 'd', 's']

匹配行首,在范围匹配时使用^字符可以表示取反     ^

例:print(re.findall('^h','hellohelloh'))     #  ^ 行首  ['h']

print(re.findall('[^0-9a-zA-Z]','1982asds'))     #  ^  取反   []

匹配行尾:$  需要写在表达式后面

例:  print(re.findall('oh$','eololheullooh'))   #  $  行尾    ['oh']

单词边界:\b      也就是指单词和空格间的位置(也就是单词末尾)

例:  print(re.findall(r'h\b','hello world hih okh'))    #       ['h', 'h']

小练习:

1:验证密码是否符合规则:不能少于8位,只能是数字字母下划线,最长16位

import  re

pwd1='123456789'

pwd2='1234'

print(re.findall('\w{8,16}',pwd))    #pwd1       ['12345678']      ,          pwd2      []

2:验证手机号码:长度11,全是数字,前三位固定范围[189 131 150]

import  re

phone='13162996258'

print(re.findall('1(?:89|31|50)\d{8}',phone))

贪婪匹配      *   +   不是固定的特殊符号,只是一种现象

例:     print(re.findall('\w','ajshskhkcd'))            #['a', 'j', 's', 'h', 's', 'k', 'h', 'k', 'c', 'd']

print(re.findall('\w+','ajshskhkcd'))         #['ajshskhkcd']

print(re.findall('\w*','ajshskhkcd'))          #['ajshskhkcd', '']

会一直匹配到不满足条件为止,用?来阻止贪婪匹配  (匹配最少满足条件的字符数)

print(re.findall('\w+?','ajshskhkcd'))         #['a', 'j', 's', 'h', 's', 'k', 'h', 'k', 'c', 'd']
                                                print(re.findall('\w*?','ajshskhkcd'))         # ['', 'a', '', 'j', '', 's', '', 'h', '', 's', '', 'k', '', 'h', '', 'k', '', 'c', '', 'd', '']

什么时候需要阻止贪婪匹配

例:src="<img src='www.baidupic.shuai1.jpg'><img src='www.baidupic.shuai2.jpg'><img src='www.baidupic.shuai3.jpg'>"

正则表达式取出图片地址

print(re.findall("src='.+?'",src))

#["src='www.baidupic.shuai1.jpg'", "src='www.baidupic.shuai2.jpg'", "src='www.baidupic.shuai3.jpg'"]
                                    print(re.findall("src='(.+?)'",src))

#['www.baidupic.shuai1.jpg', 'www.baidupic.shuai2.jpg', 'www.baidupic.shuai3.jpg']
                                    print(re.findall("src='(?:.+?)'",src))

#["src='www.baidupic.shuai1.jpg'", "src='www.baidupic.shuai2.jpg'", "src='www.baidupic.shuai3.jpg'"]

()用于给正则表达式分组(group),不会改变原来的表达式逻辑意义,效果:优先取出括号内的内容

re模块的常用方法:

1:findall    从左往右查找所有满足条件的字符 ,返回一个列表

2:  search    返回第一个匹配的字符串 ,结果封装为对象

span=(0, 5) 匹配的位置          match匹配的值

例:

print(re.search('hello','hello world hello ython'))      #<re.Match object; span=(0, 5), match='hello'>

print(re.search('hello','hello world hello ython').group())  #   hello

3:match      匹配行首 ,返回值与search相同

例:print(re.match('hello','hello world hello ython'))      #<re.Match object; span=(0, 5), match='hello'>

print(re.match('hello','hello world hello ython').group())  #   hello

对于search ,match 匹配的结果通过group来获取

4:split    分割

例:print(re.split('hello','world hello ython',maxsplit=0))   #   ['world ', ' ython']

5:compile    将正则表达式封装为一个正则对象,好处是可以重复使用这个表达式

例:pattern=re.compile('hello')

print(pattern.search('hello world hello ython'))    #<re.Match object; span=(0, 5), match='hello'>

6:sub     替换

例:print(re.sub('hello','hao','world hello ython'))     #world hao ython

小练习:现有如下字符串,用正则表达式将c和shell换位置

src='c|java|ython|shell'

#先分3组

print(re.findall('(.+?)(\|.+\|)(.+)',src))    #    [('c', '|java|ython|', 'shell')]

#再替换

print(re.sub('(.+?)(\|.+\|)(.+)',r'\3\2\1',src))      #   shell|java|ython|c

============================================================

二:subprocess模块

sub   子

process  进程

什么是进程:正在进行中的程序,每当打开一个程序就会开启一个进程,每个进程包含运行程序所需的所有

资源,正常情况下不可以跨进程访问数据,但是有些情况就需要访问别的进程数据,就提供一

个叫做管道的对象,专门用于跨进程通讯。

作用:用于执行系统命令

常用方法:

1:run   返回一个表示执行结果的对象

2:  call    返回的执行的状态码

3:  Popen    返回的也是对象          ① stdout

②stderr

③stdin

总结:subprocess的好处是可以获取指令的执行结果

subprocess执行指令时可以在子进程中执行,这样避免造成主进程卡死

re模块与subprocess模块介绍的更多相关文章

  1. python重要模块之subprocess模块

    python重要模块之subprocess模块 我们经常要通过python去执行系统的命令或者脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就相当于发起了一个新的进程, ...

  2. configparser模块,subprocess 模块,xlrd,xlwt ,xml 模块,面向对象

    1. configparser模块 2.subprocess 模块 3.xlrd,xlwt 4.xml 模块 5.面向对象 面向对象是什么? 是一种编程思想,指导你如何更好的编写代码 关注点在对象 具 ...

  3. [xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]

    [xml模块.hashlib模块.subprocess模块.os与sys模块.configparser模块] xml模块 XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数 ...

  4. python-re模块和subprocess模块

    一.re模块 re中文为正则表达式,是字符串处理的常用工具,通常用来检索和替换符合某个模式的文本. 注:要搜索的模式和字符串都可以是unicode字符串(str)和8位字符串(bytes),但是不能将 ...

  5. os模块、os.path模块、shutil模块、configparser模块、subprocess模块

    一.os模块 os指的是操作系统 该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读.写.删.复制.重命名). os.getcwd()  获取当前文件所在的文件夹路径 os.chdir()  ...

  6. 模块讲解----subprocess模块

    历史 #输出结果到屏幕上,并不返回执行状态os.system('dir')#保存命令的执行结果输出ret = os.popen('dir').read() 问题:上面2条是把命令结果保存下来了,但是返 ...

  7. Python开发基础-Day15正则表达式爬虫应用,configparser模块和subprocess模块

    正则表达式爬虫应用(校花网) import requests import re import json #定义函数返回网页的字符串信息 def getPage_str(url): page_stri ...

  8. python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】

    一.shelve模块 import shelve # 基于pickle模块, d = shelve.open('shelve_test') class Test(object): def __init ...

  9. python基础之正则表达式爬虫应用,configparser模块和subprocess模块

    正则表达式爬虫应用(校花网) 1 import requests 2 import re 3 import json 4 #定义函数返回网页的字符串信息 5 def getPage_str(url): ...

随机推荐

  1. docker exec进程是由谁产生的

    1.问题: 通过docker exec产生的进程bash(5704)看ppid是docker-containe(5564),但是通过ptrace进程号5564没有关于clone的系统调用,就算ptra ...

  2. Java技术学习路线笔记:Maven安装和作用

    Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具.主要用来管理java项目,进行依赖管理(jar包管理,能自动分析项目所需的依赖软件包,并到Maven仓库区下载)和 ...

  3. javaweb笔记—02

    1.compatible:adj. 兼容的:能共处的:可并立的2.web所有的请求都是http请求,http请求默认的编码是ISO-8859-1,不支持utf-8,要统一设置前台和后台一样,才不会乱码 ...

  4. 通过数组和枚举简化GPIO操作编码(转)

    源: 通过数组和枚举简化GPIO操作编码

  5. RTP协议全解析(H264码流和PS流)(转)

    源: RTP协议全解析(H264码流和PS流)

  6. Scrapy框架学习 - 使用内置的ImagesPipeline下载图片

    需求分析需求:爬取斗鱼主播图片,并下载到本地 思路: 使用Fiddler抓包工具,抓取斗鱼手机APP中的接口使用Scrapy框架的ImagesPipeline实现图片下载ImagesPipeline实 ...

  7. FAT16/32不等于ESP:windows安装程序无法将windows配置为在此计算机的硬件上运行

    今天给公司电脑装系统,由于公司特殊需要,要给新电脑装win7系统.三台完全一样的华硕adol笔记本,前两台都和win10并存装成了双系统,第三台被不懂系统的人尝试装win7搞坏了,只能全盘格式化后再装 ...

  8. ldap服务备份与恢复

    备份: cat ldap_backup.sh #!/bin/bash/usr/sbin/slapcat >/S3/openldap/openldap_backup_`date -d " ...

  9. 对客户端攻击:adobe_toolbutton

    对客户端攻击:adobe_toolbutton 漏洞简介 远程攻击者可以利用漏洞执行任意指令.当用户打开特定pdf就可以触发payload. 实践过程 输入命令use exploit/windows/ ...

  10. Linux下查看网卡驱动和版本信息

    Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查 ...