博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式2
阅读量:5096 次
发布时间:2019-06-13

本文共 1150 字,大约阅读时间需要 3 分钟。

参考:http://www.jb51.net/article/65286.htm

1、[^]代表除了内部包含的字符以外都能匹配

import rekey = r"mat cat hat pat"p1 = r"[^p]at"#这代表除了p以外都匹配pattern1 = re.compile(p1)print (pattern1.findall(key))#['mat', 'cat', 'hat']

2、为了方便我们写简洁的正则表达式,它本身还提供下面这样的写法

3、我们常常会在实战中遇到一些匹配的不准确的问题

import rekey = r"chuxiuhong@hit.edu.cn"p1 = r"@.+\."#我想匹配到@后面一直到“.”之间的,在这里是hitpattern1 = re.compile(p1)print (pattern1.findall(key))#['@hit.edu.']

你咋能多了呢?我理想的结果是@hit.,你咋还给我加量了呢?这是因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。

我们怎么解决这种问题呢?只要在“+”后面加一个“?”就好了。

import rekey = r"chuxiuhong@hit.edu.cn"p1 = r"@.+?\."#我想匹配到@后面一直到“.”之间的,在这里是hitpattern1 = re.compile(p1)print (pattern1.findall(key))#['@hit.']

 加了一个“?”我们就将贪婪的“+”改成了懒惰的“+”。

 个人建议:在你使用"+","*"的时候,一定先想好到底是用贪婪型还是懒惰型,尤其是当你用到范围较大的项目上时,因为很有可能它就多匹配字符回来给你

4、  为了能够准确的控制重复次数,正则表达式还提供

  {a,b}(代表a<=匹配次数<=b)

  如果你省略掉{1,2}中的2,那么就代表至少匹配一次

  如果你省略掉{1,2}中的1,那么就代表至多匹配2次。

  还是举个栗子,我们有sas,saas,saaas,我们想要sas和saas,我们怎么处理呢?

import rekey = r"saas and sas and saaas"p1 = r"sa{1,2}s"pattern1 = re.compile(p1)print (pattern1.findall(key))#['saas', 'sas']

5、

转载于:https://www.cnblogs.com/tantao258/p/7684823.html

你可能感兴趣的文章
MySQL更改默认的数据文档存储目录
查看>>
给出一个十六进制的数0xFF 0x80 (只有2“位”) 将其转换成有符号的一字节的十进制整数...
查看>>
替代微软IIS强大的HTTP网站服务器工具
查看>>
5、easyUI-菜单与按钮
查看>>
6.5 案例21:将本地数据库中数据提交到服务器端
查看>>
PyQt5--EventSender
查看>>
深入浅出Symfony2 - 结合MongoDB开发LBS应用
查看>>
android 通过AlarmManager实现守护进程
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
win7下把电脑设置成wlan热
查看>>
Java 多态 虚方法
查看>>
jquery.validate插件在booststarp中的运用
查看>>
java常用的包
查看>>
PHP批量覆盖文件并执行cmd命令脚本
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
支持向量机——内核
查看>>
MFC注册热键
查看>>
万能的SQLHelper帮助类
查看>>
三种方式创建Angular的自定义服务
查看>>
如何在 Terminal 内可以“用惯用的编辑器”快速打开“目前正在做”的专案(project)呢?...
查看>>