前情提要:

    re模块主要用于正则,用的好了秒杀一切匹配的规则,这里主要是介绍基本用法

      一:元字符

        1:\w 匹配字符,包含中文,数字或下划线


l ='早乙女露依 123  是我的 321 心目中的 222 女神 666 女神 '
# print(re.findall('\w',l))    # ['早', '乙', '女', '露', '依', '是', '我', '的', '心', '目', '中', '的', '女', '神', '女', '神']

        2:\W 匹配非字符,包含中文,数字或下划线


l ='早乙女露依 123  是我的 321 心目中的 222 女神 666 女神 '
# print(re.findall('\W',l)) #[' ', ' ', ' ', ' ', ' ', ' ', ' ']

        3:\s 匹配任意的空白符

#\s 匹配任意的空白符
# print(re.findall('\s',l)) #[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']

  

        4:\S 匹配任意的空白符

  

#\S 匹配任意非空白符
# print(re.findall('\S',l)) #['早', '乙', '女', '露', '依', '1', '2', '3', '是', '我', '的', '3', '2', '1', '心', '目', '中', '的', '2', '2', '2', '女', '神', '6', '6', '6', '女', '神']

        5:\d 匹配任意的数字

#\d 匹配数字
# print(re.findall('\d',l)) #['1', '2', '3', '3', '2', '1', '2', '2', '2', '6', '6', '6']

        6:\D匹配任意的非数字

#\D 匹配非数字
# print(re.findall('\D',l)) #['早', '乙', '女', '露', '依', ' ', ' ', ' ', '是', '我', '的', ' ', ' ', '心', '目', '中', '的', ' ', ' ', '女', '神', ' ', ' ', '女', '神', ' ']

        7:\A ^  匹配任意字符串的开始

# \A   ^ 匹配字符串的开始
# print(re.findall('\A早',l)) #['早']

        8:\Z  $ 匹配任意字符串的结尾

#\Z    $ 匹配字符串的结尾
# print(re.findall('神 $',l)) #['神 ']

  

        9: \t  \ n 匹配任意空白符

#\n  \t  匹配空白符
# print(re.findall('\n',l))

  

      二:重复匹配

        1:  . 匹配任意字符

#. 匹配任意字符
# print(re.findall('早.女',l)) # ['早乙女']

        2: ? 匹配0个或者一个左面的定义规则内容

#? 匹配0个或者1一个由左面字符定义的片段
# l ='abbzab abb aab'
# print(re.findall('a?b',l))

        3: * 匹配0 个或者多个左面的定义规则内容


#* 匹配0个或者多个左面字符表达式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a*b',l)) #['b', 'ab', 'aaaaaab', 'ab', 'b', 'b', 'ab', 'aab', 'b', 'ab', 'b', 'b']
 

        4: + 匹配1 个或者多个左面的定义规则内容

# +匹配1个或者多个左面字符表达式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a+b',l)) #['ab', 'aaaaaab', 'ab', 'ab', 'aab', 'ab']

        5: {n,m} 匹配n 至m 个左面的定义规则内容

#{n,m} 匹配n至m个左面字符的表达式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a{4,5}b',l)) #['aaaaab']

        6: .* 贪婪匹配 从头匹配到尾巴

# .* 贪婪匹配  从头匹配到尾巴
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a.*b',l)) # ['ab aaaaaab abbbabaabbabbb']

        7: .*? 非贪婪匹配  从头匹配到尾巴

#.*?非贪婪匹配 ,从头匹配到尾巴
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a.*?b',l)) #['ab', 'aaaaaab', 'ab', 'ab', 'aab', 'ab']

        8:[    ]  加入参数 匹配

[]      加入参数
# print(re.findall('a[abc]b','aab abb acb aaacb')) #['aab', 'abb', 'acb', 'acb']

        9:[0-9] 加入数字 匹配

#[0-9]
# print(re.findall('a[0-9]b','a2b a3b a0b aaf aab')) #['a2b', 'a3b', 'a0b']

        10:[a-z] 加入小写字母匹配

#[a-z]
# print(re.findall('a[a-z]b','abb bcb acb afb asssddb')) #['abb', 'acb', 'afb']

        11:[A-Z] 加入大写字母匹配

#[A-Z]
# print(re.findall('a[A-Z]b','aAb aCb Abb ABB')) #['aAb', 'aCb']

        12:[a-zA-Z]  注意不能倒过来, 需要小的在前面

# print(re.findall('a[a-zA-Z]b','aAb aCb Abb ABB'))    #['aAb', 'aCb']

        13: ()  定制一个规则, 将满足的规则匹配出来

# print(re.findall('(.*?)_b','wo_b chi_b hhe_b  fas adadas_bd')) #['wo', ' chi', ' hhe', '  fas adadas']

      三:  常用方法总结

          1:search 找到第一个规则,找不到则返回None

            对象.group() 调用

# print(re.search('alex','re alex alex 太白').group())        #alex
# print(re.search('alex','re aaleex aaleex 太白')) #None

          2:match 匹配开头文字,如果匹配不到就None

# print(re.match('alex','alex alex 太白').group())     #alex
# print(re.match('alex','re alex alex 太白')) #None

          3:spilt 切割

# s1 = 'wusir;太白,alex|日天!小虎'
# print(re.split(';,|!',s1)) #['wusir;太白,alex|日天', '小虎']

          4:compile() 制定一个规则

# re.I(re.IGNORECASE)
# 使匹配对大小写不敏感
#
# re.L(re.LOCAL)
# 做本地化识别(locale-aware)匹配
#
# re.M(re.MULTILINE)
# 多行匹配,影响 ^ 和 $
#
# re.S(re.DOTALL)
# 使 . 匹配包括换行在内的所有字符
#
# re.U(re.UNICODE)
# 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
#
# re.X(re.VERBOSE)
# 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

    

          

  

  

re 模块 常规方法使用的更多相关文章

  1. Maven提高篇系列之(一)——多模块 vs 继承

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  2. ABP新增模块可能遇到的问题

    当我们新增一个模块时: public class SSORedisModule: AbpModule { //public override void PreInitialize() //{ // b ...

  3. 爬虫与request模块

    一.爬虫简介 1.介绍 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...

  4. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  5. python2.0_day18_Django自带的用户认证模块的使用

    用户验证我们基于一个项目来学习利用Django框架中的user表实现用户认证Django练习小项目:学员管理系统设计开发 项目需求: 1.分讲师\学员\课程顾问角色, 2.学员可以属于多个班级,学员成 ...

  6. JS框架设计之加载器所在路径的探知一模块加载系统

    1.要加载一个模块,我们需要一个URL作为加载地址,一个script作为加载媒介,但用户在require是都用ID,我们需要一个将ID转换为URL的方法,思路很简单,强加个约定,URL的合成规则是为: ...

  7. Maven 梳理 -多模块 vs 继承

    Maven提高篇系列之(一)——多模块 vs 继承   这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plu ...

  8. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  9. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

随机推荐

  1. LinuxC编程怎么MakeFile

    在linux下我们都知道可以利用命令gcc hello.c -o hello 命令来变异c语言程序.其中gcc hello.c -o hello中 hello是给这个编译后生成的可执行文件取个别名 再 ...

  2. Java程序设计19——类的加载和反射-Part-A

    1 本文概要 本章介绍Java类的加载.连接和初始化的深入知识,并重点介绍Java反射相关的内容.本章知识偏底层点,这些运行原理有助于我们更好的把我java程序的运行.而且Java类加载器除了根加载器 ...

  3. java通过经纬度计算两个点的之间的距离的算法

    通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的. private const double EARTH_RADIUS = 6378.13 ...

  4. UVa 1614 Hell on the Markets (贪心+推理)

    题意:给定一个长度为 n 的序列,满足 1 <= ai <= i,要求确实每一个的符号,使得它们和为0. 析:首先这一个贪心的题目,再首先不是我想出来的,是我猜的,但并不知道为什么,然后在 ...

  5. 7、Docker Container

    7.1 什么是Container 通过image创建(copy) 在Image layer之上建立一个Container layer(可读写) 类比面向对象:类和实例 Image负责APP的存储和分发 ...

  6. 国际时区 TimeZone ID列表

    public static void main(String[] args) { Calendar c = new GregorianCalendar(); c.setTime(new Date()) ...

  7. Android源码设计模式分析开源项目

    简述 该项目通过分析Android系统中的设计模式来提升大家对设计模式的理解,从源码的角度来剖析既增加了对Android系统本身的了解,也从优秀 的设计中领悟模式的实际运用以及它适用的场景,避免在实际 ...

  8. DNS本机可解析,其他主机通过本机无法解析问题

    新建了一个redhat虚拟机,将此虚拟机作为dns服务器使用,配置完以后宿主机的dns服务器设置为配置好的虚拟机地址,结果总是显示no Server Reached,没有服务器可以到达,花了很长时间终 ...

  9. .Net core 2.0的数据初始化

    在StartUp.cs里面,添加Seed方法 public static void Seed(IApplicationBuilder applicationBuilder) { using (var ...

  10. sql server 关于表中只增标识问题

    由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错误,不能修改 set identity_inse ...