一、正则表达式

regular expression -----regex 验证匹配
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

方法:

match() 匹配 从头进行匹配 匹配不成功则返回None
fullmatch() 从头到尾 整个字符串跟pattern进行匹配 匹配不成功则返回None
search() 扫描整个字符串查找匹配正则格式的内容,找到返回Match

Match对象:
match.group() 匹配的内容
match.span() 匹配内容的位置

search: 只要在字符串中找到匹配的则不会继续查找
findall: 查找所有匹配的内容,返回值是一个列表

  1. import re
  2. # 通过re模块的compile函数,返回一个pattern对象
  3. pattern = re.compile('abc')
  4. # 通过pattern对象:match search findall split...
  5. match_obj = pattern.match('abcsdfszzabc')
  6. print(match_obj)
  7. # 匹配对象调用group获取匹配的内容
  8. g = match_obj.group()
  9. print(g)
  10.  
  11. a = re.match('123a','123A3454365123A',re.I)
  12. print(a)
  13. b = a.group()
  14. print(b)
  15.  
  16. a = re.fullmatch('aaa','AAA',re.I)
  17. print(a)
  18.  
  19. b = re.search('abc','asdabcwrfsd',re.I)
  20. print(b)
  21.  
  22. print(match_obj.group()) # 匹配的内容被取出来
  23. print(b.span()) # 匹配内容的位置

字符 功能
.      匹配任意1个字符(除了\n)
[ ]    匹配[ ]中列举的字符
\d    匹配数字,即0-9
\D   匹配非数字,即不是数字
\s    匹配空白,即 空格,tab键
\S   匹配非空白
\w   匹配单词字符,即a-z、A-Z、0-9、_(下划线)
\W     匹配非单词字符

*      配前一个字符出现0次或者无限次,即可有可无
+     匹配前一个字符出现1次或者无限次,即至少有1次
?        匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}       匹配前一个字符出现m次
{m,}      匹配前一个字符至少出现m次
{m,n}    匹配前一个字符出现从m到n次

^    匹配字符串开头
$    匹配字符串结尾
\b   匹配一个单词的边界
\B   匹配非单词边界

|         匹配左右任意一个表达式
(ab)         将括号中字符作为一个分组
\num       引用分组num匹配到的字符串
(?P<name>)   分组起别名
(?P=name)   引用别名为name分组匹配到的字符串

  1. import re
  2.  
  3. s = 'asfghjdfghaxxyxbswabrjrtwegdasazzb'
  4. m_obj = re.search('a[xyz]*b', s)
  5. if m_obj:
  6. print(m_obj.group())
  7. else:
  8. print('没有找到')
  9.  
  10. # 两头是数字,中间是字母
  11. s = '1asd23sad4'
  12. a = re.search('\d[a-z]+\d', s)
  13. if a:
  14. print(a.group())
  15. else:
  16. print('没有找到')
  17.  
  18. result = re.findall('\d[a-z]+\d', s)
  19. print(result) # ['1asd2', '3sad4']
  20.  
  21. # 验证qq号码
  22. qq = input('请输入你的qq号码:')
  23. a = re.fullmatch('[1-9]\d{5,10}', qq)
  24. print(a)
  25.  
  26. # 方式二
  27. qq = input('请输入你的qq号码:')
  28. a = re.search('^[1-9]\d{5,10}$', qq)
  29. print(a)

注:在写正则表达式要在前面添加'r', raw

正则的替换:

sub 替换
sub(pattern,repl,str)
repl:可以str类型也可以是callable类型

  1. s = 'sa sadfa sadf sad'
  2. a = re.sub(r'\s+', '#', s)
  3. print(a)
  4.  
  5. s = 'xiaohua =20, xiaoming = 18 xiaofang = 21'
  6.  
  7. def change(mobj):
  8. print(mobj)
  9. content = mobj.group()
  10. result = str(int(content) + 1)
  11. return result
  12.  
  13. a = re.sub(r'\d+', change, s)
  14. print(a)

例子:

  1. import re
  2.  
  3. username = input('请输入用户名:')
  4. a = re.fullmatch('[a-zA-Z]\w{5,}',username)
  5. if a:
  6. print(a.group())
  7. else:
  8. print('没有找到!!!')
  9.  
  10. num1 = input('请输入手机号:')
  11. a = re.fullmatch('(13|15|18)\d{9}',num1) # 1[358]\d{9}
  12. if a:
  13. print(a.group())
  14. else:
  15. print('没有找到!!!')
  16.  
  17. num1 = input('请输入手机号:')
  18. a = re.fullmatch('(\d{3}|\d{4})-\d{8}',num1) # \d{3,4} - \d{8}
  19. if a:
  20. print('合法!!!')
  21. else:
  22. print('没有找到!!!')
  23.  
  24. num1 = 'I am a good boy , a handsome boy'
  25. a = re.findall(r'\b[a-z]+\b',num1,re.I) #
  26. print(a)

贪婪与非贪婪:

  1. '''
  2. 贪婪与非贪婪:
  3. '''
  4. s = 'abbbbbbbbbbbbbc'
  5. a = re.match('ab+?',s)
  6. print(a.group())
  7.  
  8. s = '<div>hello</div><div>world</div>'
  9. a = re.match(r'<(?P<n>.+)>.+?</(?P=n)>',s)
  10. print(a.group())
  1. import re
  2. s = 'hello jack,hello tom'
  3. a = re.findall('(hello|hi) (jack|tom)',s,re.I)
  4. print(a[1][1])
  5. print(a)
  6.  
  7. # 邮箱:126,163,qq 而且必须符合邮箱的格式
  8.  
  9. email = input('请输入邮箱:')
  10. a = re.search(r'^(\w{4,10})@(126|163|qq).com$',email)
  11. if a:
  12. b = email_name = a.group(1)
  13. print('合法!!!',b)
  14. else:
  15. print('不合法!!!')
  16.  
  17. # 1开头,不是以4、7结尾的手机号码(11位) 或者 010-34567897|0311-37647326
  18. phone = input('请输入手机号或座机:')
  19. a = re.search(r'(1\d{9}[0-35689])|(\d{3,4}-\d{8})',phone)
  20. if a:
  21. print('合法!!!',phone)
  22. else:
  23. print('不合法!!!')

二、进程、线程

  1. import time
  2. from multiprocessing import Process
  3.  
  4. def program():
  5. for i in range(5):
  6. print('写代码%d行'%i)
  7. time.sleep(1)
  8.  
  9. def listen_music():
  10. musics = ['逆战','凉凉','麻婆豆腐','无地自容']
  11. for music in musics:
  12. print('正在听:{}歌'.format(music))
  13. time.sleep(1)
  14.  
  15. def weichat(user):
  16. name = '詹姆斯'
  17. for i in range(5):
  18. print('{}正在和{}聊天!!'.format(user,name))
  19. time.sleep(1)
  20.  
  21. if __name__ =='__main__':
  22. p1 = Process(target=program,name='进程1')
  23. p2 = Process(target=listen_music,name='进程2')
  24. # p3 = Process(target=weichat,args=['gang'])
  25. p3 = Process(target=weichat,name='进程3',kwargs={'user':'gang'})
  26. p1.start()
  27. p2.start()
  28. p3.start()

python-day16的更多相关文章

  1. python(day16)内置函数,匿名函数

    # add = lambda x,y:x+y # print(add(1,2)) # dic={'k1':10,'k2':100,'k3':30} # def func(key): # return ...

  2. python day- 16 面向对象

    1.类的相关知识 类:是指具有相同属性和技能的一类事物. 比如:人类 ,植物类,动物类,狗类. 对象:是类中的某一个实例,是类的具体表现. 比如:具体到某个人,某一个植物,某一条狗. class 是p ...

  3. Python day16 tag式整体退出技巧

    在写一些服务器时,往往会多层嵌套循环,可利用tag变量实现整体退出功能,代码: tag=True while tag: print('level1') choice=input('level1> ...

  4. python-day16(正式学习)

    目录 模块 什么是模块? 模块的四种形式 为什么要用模块 如何用模块 import from...import... 异同 循环导入问题 解决方案 1. 2. 模块搜索路径 random模块 模块 什 ...

  5. Python之路,Day16 - Django 进阶

    Python之路,Day16 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  6. python开发学习-day16(Django框架初识)

    s12-20160507-day16 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  7. day16 python模块 正则表达式

    day16 python   一.模块     1.什么是模块         是一组功能的集合     2.模块的类型         内置模块; python提供的, 解释器自带的         ...

  8. python学习-Day16

    目录 今日内容详细 内置函数补充 常见内置函数 help() id() int() isinstance() pow() round() sum() 求和 迭代器 可迭代对象 什么是可迭代对象? 哪些 ...

  9. Python学习路程day16

    Python之路,Day14 - It's time for Django 本节内容 Django流程介绍 Django url Django view Django models Django te ...

  10. Python之路Day16

    主要内容:Django基础进阶之:Django 流程.Django URL.Django Views.Django Models.Django Template.Django Admin Django ...

随机推荐

  1. 【bfs】密码锁-C++

    Description 现在一个紧急的任务是打开一个密码锁.密码由四位数字组成,每个数字从 1 到 9 进行编号.每次可以对任何数字加 1 或减 1.当将9加 1 时,数字将变为1,当1减 1 的时, ...

  2. [leetcode] 542. 01 Matrix (Medium)

    给予一个矩阵,矩阵有1有0,计算每一个1到0需要走几步,只能走上下左右. 解法一: 利用dp,从左上角遍历一遍,再从右下角遍历一遍,dp存储当前位置到0的最短距离. 十分粗心的搞错了col和row,改 ...

  3. [leetcode]python 448. Find All Numbers Disappeared in an Array

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  4. excel表数据生成定长txt数据

    项目作业中需要造数据,从txt文件中获取定长数据,直接从txt中修改,会显得十分麻烦,于是便利用excel自带的vba写了一个小工具.效果如下: A1表示字段名,A2表示长度,A3是数据,也可以增加字 ...

  5. linux初学者-系统服务的控制

      linux系统中系统服务的控制是比较重要的一部分,这也直接影响到计算机的使用,以下将会介绍一些系统服务的控制. 1.系统服务命令 系统的初始化程序是系统开始的第一个进程,pid为1.可以通过以下命 ...

  6. Html5web全栈前端开发_angular框架

    昵称领取全套angular视频教程 一.Typescript typescript简称ts,是js语法的超集,很多js新的语法就借鉴了ts语法.ts是由微软团队维护的 1.1 TS简介 1.1.1 G ...

  7. 手撸PHP数据库连接

    最近这个月过得确实有点狼狈....不停地复习,看书..终于到今天为止考完了2科了.能让我好好地写写博客了..前段时间的PHP课设我多学了点东西,在我们一般老师讲的php连接数据库方面做了一些优化.前段 ...

  8. 给定一个IP地址,转化为二进制32位,再转化为十进制,写出一个方法让其十进制转为IP地址

    十进制是已知的数值 第一种方法: <script type="text/javascript"> var num=2148140545; var str=num.toS ...

  9. sealos2.0使用教程,最简单kubernetesHA方案

    kubernetes集群三步安装 概述 本文教你如何用一条命令构建k8s高可用集群且不依赖haproxy和keepalived,也无需ansible.通过内核ipvs对apiserver进行负载均衡, ...

  10. Active Directory域

    引言 在 Microsoft® Windows® 2000 Server 操作系统的诸多增强功能中,Microsoft Active Directory™ 功能的引入意义最为重大,但也最常引起困惑.与 ...