1. 正则表达式(单个字符匹配)

  1. # ### 正则表达式 => 单个字符匹配
  2. import re
  3. """
  4. lst = re.findall(正则表达式,字符串)
  5. """
  6.  
  7. # (1) 预定义字符集
  8.  
  9. # \d 匹配数字
  10. strvar = "sadfasdf^*&^&*^&*^&*你好 神秘男孩 2400909()()"
  11. lst = re.findall("\d",strvar)
  12. print(lst)
  13.  
  14. # \D 匹配非数字
  15. strvar = "&&*sdfjklasjdkf_sdf',神秘女孩23423岁4234234"
  16. lst = re.findall("\D",strvar)
  17. print(lst)
  18.  
  19. # \w 匹配字母或数字或下划线 (正则函数中,支持中文的匹配)
  20. strvar = "uiui7887_王文&*&*"
  21. lst = re.findall("\w",strvar)
  22. print(lst)
  23.  
  24. # \W 匹配非字母或数字或下划线
  25. strvar = "uiui7887_王文&*&*"
  26. lst = re.findall("\W",strvar)
  27. print(lst)
  28.  
  29. # \s 匹配任意的空白符 \n \t \r " "
  30. strvar = " 周杰伦 "
  31. lst = re.findall("\s",strvar)
  32. print(lst)
  33.  
  34. # \S 匹配任意非空白符
  35. strvar = " sdf234 "
  36. lst = re.findall("\S",strvar)
  37. print(lst)
  38.  
  39. # \n 匹配一个换行符 [最好在正则表达式的前面加上r,让转义字符失效,原型化匹配]
  40. strvar = """
  41. 王文你真帅呀,我受不了
  42. """
  43. lst = re.findall(r"\n",strvar)
  44. print(lst)
  45.  
  46. # \t 匹配一个制表符
  47. lst = re.findall(r"\t",strvar)
  48. print(lst)
  49.  
  50. # (2) 字符组 从小组中默认选一个
  51. lst = re.findall("[123]","")
  52. print(lst)
  53.  
  54. print(re.findall('a[abc]b','aab abb acb adb')) # aab abb acb
  55. print(re.findall('a[0123456789]b','a1b a2b a3b acb ayb')) # a1b a2b a3b
  56.  
  57. # 优化写法 0123456789 => 0-9 0到9 -是特殊字符 , 居右特殊含义
  58. print(re.findall('a[0-9]b','a1b a2b a3b acb ayb')) # a1b a2b a3b
  59.  
  60. print(re.findall('a[abcdefg]b','a1b a2b a3b acb ayb adb')) # acb adb
  61.  
  62. # 优化写法 abcdefg a-g 26个小写字母 a-z
  63. print(re.findall('a[a-z]b','a1b a2b a3b acb ayb adb')) # acb adb ayb
  64.  
  65. print(re.findall('a[ABCDEFG]b','a1b a2b a3b aAb aDb aYb')) # aAb aDb
  66.  
  67. # 优化写法 ABCDEFG A-G 26个大写字母A-Z
  68. print(re.findall('a[A-Z]b','a1b a2b a3b aAb aDb aYb')) # aAb aDb aYb
  69.  
  70. # 匹配所有的字母+数字
  71. print(re.findall('a[0-9a-zA-Z]b','a-b aab aAb aWb aqba1b')) # aab aAb aWb aqb a1b
  72.  
  73. # 优化写法 0-9a-zA-Z 0-z 范围变大 一些特殊符号也被包含进行了 , 不推荐使用
  74. print(re.findall('a[0-z]b','a-b aab aAb aWb aqba@b')) # ['aab', 'aAb', 'aWb', 'aqb', 'a@b']
  75.  
  76. print(re.findall('a[0-9][*#/]b','a1/b a2b a29b a56b a456b')) # a1/b
  77.  
  78. # ^ 出现在字符组中,代表除了 ,除了+-*/ 这个符号 都要
  79. print(re.findall('a[^-+*/]b',"a%b ccaa*bda&bd")) # ['a%b', 'a&b']
  80.  
  81. # 匹配特殊符号 利用\ 让原来有意义的字符失效, 通过转义来实现匹配
  82. lst = re.findall(r"a[\^\-]b","a^b a-b")
  83. print(lst)
  84.  
  85. # 匹配\
  86. lst = re.findall(r"a\\b",r"a\b")
  87. print(lst) # 显示\\
  88. print(lst[0]) # 打印出来是一个\

正则表达式_单个字符匹配 示例代码

2. 正则表达式(多字符匹配)

  1. # ### 正则表达式 => 多个字符匹配
  2.  
  3. # (1) 量词基本语法
  4. import re
  5. '''1) ? 匹配0个或者1个a '''
  6. print(re.findall('a?b','abbzab abb aab')) # ab b ab ab b ab
  7.  
  8. '''2) + 匹配1个或者多个a '''
  9. print(re.findall('a+b','b ab aaaaaab abb')) # ab aaaaaab ab
  10.  
  11. '''3) * 匹配0个或者多个a '''
  12. print(re.findall('a*b','b ab aaaaaab abbbbbbb')) # b ab aaaaaab ab b b b b b b
  13.  
  14. '''4) {m,n} 匹配m个至n个a '''
  15. """1<= x <=3"""
  16. print(re.findall('a{1,3}b','aaab ab aab abbb aaz aabb')) # aaab ab aab ab aab
  17. # {m,} 至少m次
  18. print(re.findall('a{2,}b','aaab ab aab abbb aaz aabb')) # aaab aab aab
  19. # {m} 必须m次
  20. print(re.findall('a{2}b','aaab ab aab abbb aaz aabb')) #aab aab aab
  21.  
  22. # (2)贪婪模式与非贪婪模式
  23. """
  24. 贪婪模式 : 默认向更多次匹配
  25. 非贪婪模式: 默认向更少次匹配
  26.  
  27. 贪婪模式在底层使用的是回溯算法:
  28. 回溯算法:默认从左向右进行匹配,一直到最后,直到最后再也匹配不到了,回头,找最后一个能够匹配到的数据
  29.  
  30. 非贪婪模式: 在量词的后面加?,这个语法就是非贪婪,默认向更少次匹配
  31. .?? .+? .*? .{1,25}?
  32. """
  33. # 贪婪模式
  34. strvar = "刘能和刘德华和刘铁锤子777子888"
  35. lst = re.findall("刘.",strvar) #刘能 刘德 刘铁
  36. print(lst)
  37.  
  38. lst = re.findall("刘.?",strvar) #刘能 刘德 刘铁
  39. print(lst)
  40.  
  41. lst = re.findall("刘.+",strvar) #['刘能和刘德华和刘铁锤子777子888']
  42. print(lst)
  43.  
  44. lst = re.findall("刘.*",strvar) #['刘能和刘德华和刘铁锤子777子888']
  45. print(lst)
  46.  
  47. lst = re.findall("刘.{1,25}",strvar) #['刘能和刘德华和刘铁锤子777子888']
  48. print(lst)
  49.  
  50. lst = re.findall("刘.{1,25}子",strvar) # ['刘能和刘德华和刘铁锤子777子']
  51. print(lst)
  52.  
  53. # 非贪婪模式
  54. strvar = "刘能和刘德华和刘铁锤子777子888"
  55. lst = re.findall("刘.??",strvar) #['刘', '刘', '刘']
  56. print(lst)
  57.  
  58. lst = re.findall("刘.+?",strvar) #刘能 刘德 刘铁
  59. print(lst)
  60.  
  61. lst = re.findall("刘.*?",strvar) #['刘', '刘', '刘']
  62. print(lst)
  63.  
  64. lst = re.findall("刘.{1,25}?",strvar) #刘能 刘德 刘铁
  65. print(lst)
  66.  
  67. lst = re.findall("刘.{1,25}?子",strvar) # ['刘能和刘德华和刘铁锤子']
  68. print(lst)
  69.  
  70. # (3) 边界符
  71. """
  72. 转义字符 :\b backspace 退格
  73. 边界符也用的是\b,要注意转义
  74. 例如:word 卡住边界
  75. (1) 卡住左边界 \bw
  76. (2) 卡住右边界 d\b
  77. """
  78. strvar = "pwd word szf"
  79. lst = re.findall(r"\bw.*",strvar)
  80. lst = re.findall(r"\bw.*?",strvar)
  81. lst = re.findall(r"\bw.*? ",strvar)
  82. lst = re.findall(r"\bw\S*",strvar)
  83.  
  84. print(lst)
  85. lst = re.findall(r"d\b",strvar)
  86. lst = re.findall(r".*d\b",strvar)
  87. lst = re.findall(r".*?d\b",strvar) # ['pwd', ' word']
  88. print(lst)
  89.  
  90. # (4) ^ $
  91. """
  92. ^ 以...开头
  93. $ 以...结尾
  94. 如果正则表达式里面出现了^ $ ,代表把这个字符串看成一个整体,再去匹配
  95. """
  96.  
  97. strvar = "大哥大嫂大爷"
  98. print(re.findall('大.',strvar)) # 大哥 大嫂 大爷
  99. print(re.findall('^大.',strvar)) # 大哥
  100. print(re.findall('大.$',strvar)) # ['大爷']
  101. print(re.findall('^大.$',strvar))# []
  102. print(re.findall('^大.*?$',strvar)) # 大哥大嫂大爷
  103. print(re.findall('^大.*?大$',strvar)) # []
  104. print(re.findall('^大.*?爷$',strvar)) # ['大哥大嫂大爷']
  105.  
  106. print(re.findall('^g.*? ' , 'giveme 1gfive gay')) #giveme
  107. print(re.findall('five$' , 'aassfive')) # five
  108. print(re.findall('^giveme$' , 'giveme')) # giveme
  109. print(re.findall('^giveme$' , 'giveme giveme')) # []
  110. print(re.findall('giveme' , 'giveme giveme')) #[giveme giveme]
  111. print(re.findall("^g.*e",'giveme 1gfive gay')) #giveme 1gfive

正则表达式_多字符匹配 示例代码

3. 正则表达式(匹配分组 / search / 命名分组)

  1. # ### 正则表达式 => 匹配分组
  2. import re
  3. print(re.findall('.*?_good','wusir_good alex_good secret男_good'))
  4. # 把想要匹配的内容,用小圆括号包起来,表达分组
  5. print(re.findall('(.*?)_good','wusir_good alex_good secret男_good'))
  6. # ?: 取消括号优先显示的功能
  7. print(re.findall('(?:.*?)_good','wusir_good alex_good secret男_good'))
  8.  
  9. # | 代表或 , a|b 匹配字符a 或者 匹配字符b . 把字符串长的写在前面,字符串短的写在后面
  10. # abc 或者 abcd
  11. strvar = "abcpiopipoabcd234"
  12. lst = re.findall("abc|abcd",strvar)
  13. print(lst)
  14.  
  15. # 改写
  16. lst = re.findall("abcd|abc",strvar)
  17. print(lst)
  18.  
  19. """
  20. \ 可以把有意义的字符变得无意义,还可以把无意义的字符变得有意义,用来转义字符
  21. \n : 换行
  22. \. : 单纯的匹配一个点
  23. """
  24. """
  25. 5.6
  26. \d\.\d
  27.  
  28. 39.56
  29. \d+\.\d+
  30. """
  31. # 匹配小数
  32. strvar = "3.56 89.. .898234 8,67 39.56 34"
  33. lst = re.findall("\d+\.\d+",strvar)
  34. print(lst)
  35.  
  36. # 匹配小数和整数
  37. lst = re.findall(r"\d+\.\d+|\d+",strvar)
  38. print(lst)
  39.  
  40. # 使用分组合并正则 匹配小数和整数
  41. lst = re.findall(r"\d+(?:\.\d+)?",strvar)
  42. print(lst)
  43.  
  44. # 匹配135或171的手机号
  45. lst = re.findall(r"(?:135|171)\d{8}","13566668888 17112345678 185996964545")
  46. print(lst)
  47.  
  48. lst = re.findall(r"^(?:135|171)\d{8}$","")
  49. print(lst)
  50.  
  51. # 匹配www.baidu.com 或者 www.oldboy.com
  52. strvar = "www.oldboy.com www.baidu.com"
  53. lst = re.findall(r"(?:www)\.(?:baidu|oldboy)\.(?:com)",strvar)
  54. print(lst)
  55.  
  56. # search
  57. """
  58. findall 匹配所有内容,缺陷:不能把匹配到的内容和分组里面的内容同时显示出来,返回的是列表
  59. search 匹配到一个内容就直接返回,优点:可以把分组的内容,和实际匹配到的内容分开,同时显示,返回的是对象obj
  60.  
  61. obj.group() 获取匹配到的内容
  62. obj.groups() 获取分组里面的内容
  63. """
  64. strvar = "www.oldboy.com www.baidu.com"
  65. obj = re.search(r"(www)\.(baidu|oldboy)\.(com)",strvar)
  66. print(obj)
  67. # 获取匹配到的内容
  68. res = obj.group()
  69. print(res)
  70. # 获取分组里面的内容 (推荐)
  71. res = obj.groups()
  72. print(res)
  73.  
  74. # 获取分组里第一个元素
  75. res = obj.group(1)
  76. print(res)
  77. # 获取分组里第二个元素
  78. res = obj.group(2)
  79. print(res)
  80. # 获取分组里第三个元素
  81. res = obj.group(3)
  82. print(res)
  83.  
  84. # "5*6-7/3" 匹配 5*6 或者 7/3
  85. strvar = "5*6-7/3"
  86. obj = re.search(r"\d+[*/]\d+",strvar)
  87. res = obj.group()
  88. print(res)
  89.  
  90. 30
  91. ""
  92. replace("5*6","") "5*6-7/3"

正则表达式_匹配分组_search函数 示例代码

  1. # ### 正则表达式 => 匹配分组
  2. import re
  3. print(re.findall('.*?_good','wusir_good alex_good secret男_good'))
  4. # 把想要匹配的内容,用小圆括号包起来,表达分组
  5. print(re.findall('(.*?)_good','wusir_good alex_good secret男_good'))
  6. # ?: 取消括号优先显示的功能
  7. print(re.findall('(?:.*?)_good','wusir_good alex_good secret男_good'))
  8.  
  9. # | 代表或 , a|b 匹配字符a 或者 匹配字符b . 把字符串长的写在前面,字符串短的写在后面
  10. # abc 或者 abcd
  11. strvar = "abcpiopipoabcd234"
  12. lst = re.findall("abc|abcd",strvar)
  13. print(lst)
  14.  
  15. # 改写
  16. lst = re.findall("abcd|abc",strvar)
  17. print(lst)
  18.  
  19. """
  20. \ 可以把有意义的字符变得无意义,还可以把无意义的字符变得有意义,用来转义字符
  21. \n : 换行
  22. \. : 单纯的匹配一个点
  23. """
  24. """
  25. 5.6
  26. \d\.\d
  27.  
  28. 39.56
  29. \d+\.\d+
  30. """
  31. # 匹配小数
  32. strvar = "3.56 89.. .898234 8,67 39.56 34"
  33. lst = re.findall("\d+\.\d+",strvar)
  34. print(lst)
  35.  
  36. # 匹配小数和整数
  37. lst = re.findall(r"\d+\.\d+|\d+",strvar)
  38. print(lst)
  39.  
  40. # 使用分组合并正则 匹配小数和整数
  41. lst = re.findall(r"\d+(?:\.\d+)?",strvar)
  42. print(lst)
  43.  
  44. # 匹配135或171的手机号
  45. lst = re.findall(r"(?:135|171)\d{8}","13566668888 17112345678 185996964545")
  46. print(lst)
  47.  
  48. lst = re.findall(r"^(?:135|171)\d{8}$","")
  49. print(lst)
  50.  
  51. # 匹配www.baidu.com 或者 www.oldboy.com
  52. strvar = "www.oldboy.com www.baidu.com"
  53. lst = re.findall(r"(?:www)\.(?:baidu|oldboy)\.(?:com)",strvar)
  54. print(lst)
  55.  
  56. # search
  57. """
  58. findall 匹配所有内容,缺陷:不能把匹配到的内容和分组里面的内容同时显示出来,返回的是列表
  59. search 匹配到一个内容就直接返回,优点:可以把分组的内容,和实际匹配到的内容分开,同时显示,返回的是对象obj
  60.  
  61. obj.group() 获取匹配到的内容
  62. obj.groups() 获取分组里面的内容
  63. """
  64. strvar = "www.oldboy.com www.baidu.com"
  65. obj = re.search(r"(www)\.(baidu|oldboy)\.(com)",strvar)
  66. print(obj)
  67. # 获取匹配到的内容
  68. res = obj.group()
  69. print(res)
  70. # 获取分组里面的内容 (推荐)
  71. res = obj.groups()
  72. print(res)
  73.  
  74. # 获取分组里第一个元素
  75. res = obj.group(1)
  76. print(res)
  77. # 获取分组里第二个元素
  78. res = obj.group(2)
  79. print(res)
  80. # 获取分组里第三个元素
  81. res = obj.group(3)
  82. print(res)
  83.  
  84. # "5*6-7/3" 匹配 5*6 或者 7/3
  85. strvar = "5*6-7/3"
  86. obj = re.search(r"\d+[*/]\d+",strvar)
  87. res = obj.group()
  88. print(res)
  89.  
  90. 30
  91. ""
  92. replace("5*6","") "5*6-7/3"

正则表达式_命名分组 示例代码

day21

day21-Python运维开发基础(单个字符匹配 / 多字符匹配)的更多相关文章

  1. Python运维开发基础09-函数基础【转】

    上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...

  2. Python运维开发基础08-文件基础【转】

    一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...

  3. Python运维开发基础07-文件基础【转】

    一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...

  4. Python运维开发基础06-语法基础【转】

    上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...

  5. Python运维开发基础05-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...

  6. Python运维开发基础03-语法基础 【转】

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...

  7. Python运维开发基础02-语法基础【转】

    上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...

  8. Python运维开发基础01-语法基础【转】

    开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...

  9. Python运维开发基础10-函数基础【转】

    一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...

  10. Python运维开发基础04-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...

随机推荐

  1. Spring IoC(一)bean实例化和依赖注入

    1.IoC容器概述 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入. 所谓 IOC ,就 ...

  2. 再次配置caffe-windows vs2015+cuda10.0+RTX2070+python3.5

    前段时间换了一个配置高一点的台式机,因此重新安装了caffe,这次安装遇到了很多以前没有遇到的问题,特记录一下. 先罗列一下电脑配置:vs2015+cuda10.0+python3.5(Anacond ...

  3. static静态变量使用@Value注入方式

    @Componentpublic class MyConfig { private static String env; public static String getEnv() { return ...

  4. Laravel Vuejs 实战:开发知乎 (6)发布问题

    1.view部分: 安装一个扩展包:Laravel-UEditor composer require "overtrue/laravel-ueditor:~1.0" 配置 添加下面 ...

  5. Java面向对象封装优化1_this(Python中的self)

    1. 类 package cn.itcast.day06.demo03; /* 问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来. 解决方案:用private关键字将需要保护的成员变 ...

  6. CSS - 引入方法

    1. 外部样式表 <head> <link rel="stylesheet" type="text/css" href="style ...

  7. python调用scala或java包

    项目中用到python操作hdfs的问题,一般都是使用python的hdfs包,然而这个包初始化起来太麻烦,需要: from pyspark impport SparkConf, SparkConte ...

  8. 抽取JDBC工具类

    package com.wbytts.util; import java.io.IOException; import java.io.InputStream; import java.sql.Con ...

  9. PyQt5窗口操作大全

    1.多窗口交互-使用信号与槽函数'''如果一个窗口和一个窗口交互,尽量不要访问窗口B的控件:应该访问与信号绑定的槽函数,从而降低窗口之间的耦合度 例:如果A直接访问B窗口的控件,一旦B窗口的控件发生改 ...

  10. logback.xml设置mogodb日志打印控制台

    <logger name="org.springframework.data.mongodb.core" level="DEBUG"/>