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. 【洛谷】P1288 取数游戏II

    题目链接:https://www.luogu.org/problemnew/show/P1288 题意:中文题面不赘述啦. 题解:代码很好写,其实就是判断边数是否为偶数.先手确定方向其实都是一样的,但 ...

  2. the blank final field factors may not have been initialized

    Q1: why we should initialize final field before completion of new instance? final means no changeabl ...

  3. LVS DR模拟实验

    准备多台服务器,现以三台服务器为例第一台做调度器 192.168.200.111[root@localhost ~]# iptables -F[root@localhost ~]# setenforc ...

  4. 支付宝支付接口-运行支付宝demo

    运行deme 提供了 支付  查询 退款 交易关闭几个简单的接口demo 下载 https://docs.open.alipay.com/270/106291/ 转为mave项目 1.创建一个空的ma ...

  5. input 实现一次性上传文件

    在实际项目中可能会用到,上传多个文件请求一次接口,因此,主要代码 $('#tabList').on('click','.resetWorkStatus',function(){ var that = ...

  6. Redis探索之路(六):Redis的常用命令

    一:键值相关命令 1.keys Pattern模糊查询 keys my* 2.exists某个key是否存在 exists key1 3.del 删除一个key del key1 4.expire设置 ...

  7. C/C++ 智能指针

    // 转载自 :https://www.cnblogs.com/wuyepeng/p/9741241.html { 为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new ...

  8. TTreeView、TTreeNodes和TTreeNode

    TreeView是Delphi中使用频率比较高的一个控件,虽然使用次数很多,但总结不够.借着这次做GDW原型的机会总结一下,写的过程中也会参考网上的博文. TTreeView.TTreeNodes和T ...

  9. javascript中内置函数

    一.基本函数库 split():用于把一个字符串分割成字符串数组 toUpperCase(): substr(): 长度 length() 拼接(两种) + concat():合并多个字符串,并返回合 ...

  10. 线性dp——hdu6578经典dp

    多校第一场第一题,这种类型的dp之前做过两题,状态转移一般是从当前状态往后推的 很经典的dp,不过很卡时间 /* 定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} ...