Python之路,Day14 = Python基础14

 compile()
match()
search()
findall() m.group() # 括号里面剋跟参数,表示打印里面(分组)的第几个元素(索引从1开始) 需要测试下 a = re.compile(r'abc') # 制作匹配规则
a.search('abcdefghijk') # a是一个对象 match # 从第一个开始匹配
findall # 找出所有符合规则的
search # 从前往后开始寻找 元字符
. # 除换行符的任意字符
\ # 转义字符
# re 模块是 python 调用的一个 小型语言,如果 规则里面有 \\ 的话,
# python 解释器在读取的时候,就会先把它转成 \ 去掉特殊意义,
# 但是 re 里面还是需要转化 \ 的特殊意义,所以,需要 \\\\ 来使用
# 经过 python 的时候,变成了 \\, 到 re 里面,就变成了 \;
[...] # 字符集合 \d # 数字[0-9]
\D # 非数字[^0-9]
\s # 空白字符[<空格>\t\r\n\f\n]
\S # 非空白字符[^\s]
\w # 单字字符[A-Za-z0-9]
\W # 非单词字符[^\w] 数量词字符
* # 匹配前0个字符1次或者多次
+ # 匹配前一个字符1次或者多次
? # 匹配前一个字符0次或者1次
{m} # 匹配前一个字符m次
{m,n} # 匹配前一个字符m至n次
数量词?# 变成非贪婪模式(默认为贪婪模式,尽可能的匹配多的次数) ^
'^[abc]' # 以a或b或c开头的
'[^abc]' # 非a、b、c 边界字符
^ # 匹配字符串开头,多行匹配每一行开头
'^[abc]' # 以a或b或c开头的
'[^abc]' # 非a、b、c $ # 匹配字符串末尾,多行匹配每一行末尾
\A # 仅匹配字符串开头,注意转义字符
\Z # 仅匹配字符串末尾,注意转义字符
\b # 匹配\w和\W之间,注意转义字符 逻辑、分组
| # 或
ret = findall("www\.(?:\w+)\.(?:com|cn)")
# findall 默认只显示 分组的信息(括号里面的), 加了 ?: 那么就取消优先级啊(打印所有)
# | 两个要用 括号 括起来 (...) # 匿名分组
a = re.compile('(a)b(c)')
a.match('abcdefg')
a.groups() # 分组匹配。会打印出一个元组,符合规则a的为第一个元素,符合规则c的为第二个元素,如果后面的规则也有括号的话,依次变为元素 (?P<name>...) # 除了分组外还替该组制定一个 name 的别名
p = re.compile('(?P<name>a)b(c)')
a = p.match('abcdef')
a.group('name') # 可以把这个对应的元素取出来
a.groups()
a.groupdict() \<number> # 引入编号为<number>的分组匹配到的字符串
p = re.compile(r'(?<name>a)b(c)\1') # 注意 1 前面的 \ ,不加 r ,会被当成转义字符,可以写两个 \
# \1 像当与在这个位置引用了前面第一个的那个规则(分组里面的第一个),同样,不会被写入到分组中
p.match('abcdef')
a.groups()
a.groupdict() (?P=name) # 引用别名为<name>的分组匹配到的字符串
p = re.compile('(?<name>a)b(c)(?P=name)')
# (?P=name) 相当于在这个位置引用了前面那个 名字叫 name 的这个规则,虽然这里有括号,但是它只会匹配到,不会放入分组中
p.match('abcdef')
a.groups()
a.groupdict() 特殊构造
(?:...) # (...) 不分组版本,虽然在括号里面,但是不进行分组
(?#...) # #号后面的内容将作为注释
(?=...) # 后面的限定词满足 ... 条件
re.compile(r'a(?=\d)') # 匹配前面是a,后面是数字的内容,得到的结果显示出a,不显示后面的数字
(?!...) # 后面的限定词不满足 ... 条件
(?<=...) # 前面的限定词满足 ... 条件
(?<!...) # 前面的限定词不满足 ... 条件
(?(id/name) yes |no) #
# re.compile(r'(\d)?abc(?(1)\d|abc)')
# 匹配规则为 (\d)?abc ,有分组;
# (?(1)\d|abc) 前面 分组里面位置为 1 的规则,可以是数字,也可以是 abcdef 正则表达式开关
忽略大小写:
可以写成:re.compile(r'(?i)abc')
开关模式:re.compile(r'abc', re.I) # 推荐 sub
p = re.compile(r'(\w) (\w)')
s = 'hi you, good boy'
print(p.sub(r'\2 \1', s)
>>> you hi, boy good

day26 re正则表达式的更多相关文章

  1. CRM项目之RBAC权限组件-day26

    写在前面 上课第26天,打卡: 世间安得双全法 不负如来不负卿 s17day26 CRM项目 项目概要:XX公司CRM - 权限管理,公共组件,app ***** - 熟悉增删改查,Low *** - ...

  2. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  3. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  4. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

  5. C#基础篇 - 正则表达式入门

    1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...

  6. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  7. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  8. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  9. JavaScript 正则表达式语法

    定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...

随机推荐

  1. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

  2. 22-1-sort

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. web 服务中上传文件大小控制

    参考文章:https://rensanning.iteye.com/blog/2388353 项目场景: Vue + Nginx + Java + Tomcat Nginx作为反向代理服务器,访问To ...

  4. 用python 编写redis 暴力破解密码的程序

    本文摘自http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/ import redisimport l ...

  5. vue导出table内容至excel——转

    一:在项目中需要安装2个依赖项,如下命令: npm install --save file-saver xlsx 二:在vue文件中如下使用即可: <template> <div c ...

  6. 线程池 一 ScheduledThreadPoolExecutor

    java.util.concurrent public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ...

  7. delphi xe10 传感器操作

    MotionSensor1: TMotionSensor; 加速传感器 MotionSensor1.Sensor(AngleAccelX.AngleAccelY.AngleAccelZ)加速度 pro ...

  8. Java获取properties配置文件信息

    调用方法:String url = PropertiesUtil.getProperty("url"); public class PropertiesUtil { public ...

  9. NX二次开发-创建圆弧(起点-终点-半径)UF_CURVE_create_arc_point_point_radius

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> UF_initialize(); //起点 ]; ArcStartPoint[ ...

  10. NX二次开发-UFUN移动工程图视图到另一个图纸页UF_DRAW_move_view_to_drawing

    #include <uf.h> #include <uf_draw.h> #include <uf_obj.h> UF_initialize(); //找名字获取视 ...