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. Vuex 源码解析

    先来看一下这张Vuex的数据流程图,熟悉Vuex使用的同学应该已经有所了解. Vuex实现了一个单向数据流,在全局拥有一个State存放数据,所有修改State的操作必须通过Mutation进行,Mu ...

  2. ajax的两种应用方式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 一个服务io占满,服务器无响应

    (1).服务器io占满,服务无响应, sar -q -f  /var/log/sa/sa28 上图显示plist-sz 增加了一倍 plist-sz 说明:进程列表中的进程(processes)和线程 ...

  4. PL SQL 存储过程 SQL SERVER创建存储过程及调用,Oracle创建存储过程及调用

    Oracle使用存储过程实例: 例1: //查出表字段赋值给存储过程变量 create proc proc_stu @sname varchar(20), //默认是输入参数(input),另外还有两 ...

  5. [转载]A星寻路算法介绍

    转载自:http://www.raywenderlich.com/zh-hans/21503/a%E6%98%9F%E5%AF%BB%E8%B7%AF%E7%AE%97%E6%B3%95%E4%BB% ...

  6. 使用vue-cli 脚手架快速搭建单页面组件 -------webpack工具的介绍

    在使用vue-cli时我们先了解一下什么是webpack. Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按 ...

  7. js 购物车的数量加减,对应的总价也随机变化

    html相关的源码: <div class="goods_num clearfix"> <div class="num_name fl"> ...

  8. NX二次开发-UFUN打开工程图UF_DRAW_open_drawing

    NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_part.h> UF_initialize ...

  9. string替换所有指定字符串(C++)【转载】

    转载自https://blog.csdn.net/a_222850215/article/details/79985504 C++的string提供了replace方法来实现字符串的替换,但是对于将字 ...

  10. vijos1710 Mrw的工资计划

    #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> ...