当前位置: 首页 > news >正文

做平面设计去哪个网站找素材好网站建设后台功能

做平面设计去哪个网站找素材好,网站建设后台功能,微信小游戏开发软件,图片加文字原标题#xff1a;Python正则表达式#xff0c;这一篇就够了#xff01;大多数编程语言的正则表达式设计都师从Perl#xff0c;所以语法基本相似#xff0c;不同的是每种语言都有自己的函数去支持正则#xff0c;今天我们就来学习 Python中关于 正则表达式的函数。re模块…原标题Python正则表达式这一篇就够了大多数编程语言的正则表达式设计都师从Perl所以语法基本相似不同的是每种语言都有自己的函数去支持正则今天我们就来学习 Python中关于 正则表达式的函数。re模块主要定义了9个常量、12个函数、1个异常每个常量和函数猪哥 都会通过实际代码案例讲解让大家能更直观的了解其作用注为避免出现代码格式错乱猪哥尽量使用代码截图演示哦。一、re模块简介聊到Python正则表达式的支持首先肯定会想到 re 库这是一个Python处理文本的 标准库。标准库 的意思表示这是一个 Python内置模块 不需要额外下载目前Python内置模块大概有300个。可以在这里查看Python所有的内置模块https://docs.python.org/3/py-modindex.html#cap-r因为re是内置模块所以不需要再下载使用时直接引入即可import rere模块官方文档https://docs.python.org/zh-cn/3.8/library/re.htmlre模块库源码https://github.com/python/cpython/blob/3.8/Lib/re.py二、re模块常量常量即表示不可更改的变量一般用于做标记。re模块中有9个常量常量的值都是int类型上图我们可以看到所有的常量都是在 RegexFlag枚举类 来实现这是在Python 3.6做的改版。在Python 3.6以前版本是直接将常量写在re.py中使用枚举的好处就是方便管理和使用下面我们来快速学习这些常量的作用及如何使用他们按常用度排序1. IGNORECASE语法 re.IGNORECASE 或简写为 re.I作用 进行忽略大小写匹配。代码案例在默认匹配模式下 大写字母B 无法匹配 小写字母b 而在 忽略大小写 模式下是可以的。2. ASCII语法 re.ASCII 或简写为 re.A作用 顾名思义ASCII表示ASCII码的意思让 \w , \W , \b , \B , \d , \D , \s 和 \S只匹配ASCII而不是Unicode。代码案例在默认匹配模式下 \w 匹配到了所有字符串而在 ASCII 模式下只匹配到了a、b、c(ASCII编码支持的字符)。注意这只对字符串匹配模式有效对字节匹配模式无效。3. DOTALL语法 re.DOTALL 或简写为 re.S作用 DOT表示 . ALL表示所有连起来就是 . 匹配所有包括换行符 \n 。 默认模式下 . 是不能匹配行符 \n 的 。代码案例在默认匹配模式下 . 并没有匹配换行符 \n 而是将字符串分开匹配而在 re.DOTALL 模式下换行符 \n 与字符串一起被匹配到。注意 默认匹配模式下 . 并不会匹配换行符 \n 。4. MULTILINE语法 re.MULTILINE 或简写为 re.M作用 多行模式当某字符串中有换行符 \n 默认模式下是不支持换行符特性的比如行开头 和 行结尾而多行模式下是支持匹配行开头的。代码案例正则表达式中 ^ 表示匹配行的开头默认模式下它只能匹配字符串的开头而在多行模式下它还可以匹配 换行符 \n 后面的字符。注意正则语法中 ^ 匹配行开头、 \A 匹配字符串开头单行模式下它两效果一致多行模式下 \A 不能识别 \n 。5. VERBOSE语法 re.VERBOSE 或简写为 re.X作用 详细模式可以在正则表达式中加注解代码案例默认模式下并不能识别正则表达式中的注释而详细模式是可以识别的。当一个正则表达式十分复杂的时候详细模式或许能为你提供另一种注释方式但它不应该成为炫技的手段建议谨慎考虑后使用6.LOCALE语法 re.LOCALE 或简写为 re.L作用 由当前语言区域决定 \w , \W , \b , \B 和大小写敏感匹配这个标记只能对byte样式有效。 这个标记官方已经不推荐使用 因为语言区域机制很不可靠它一次只能处理一个 “习惯”而且只对8位字节有效。注意 由于这个标记官方已经不推荐使用而且猪哥也没使用过所以就不给出实际的案例7.UNICODE语法 re.UNICODE 或简写为 re.U作用 与 ASCII 模式类似匹配unicode编码支持的字符但是 Python 3 默认字符串已经是Unicode所以有点冗余。8. DEBUG语法 re.DEBUG作用 显示编译时的debug信息。代码案例虽然debug模式下确实会打印编译信息但猪哥并不理解这是什么语言 以及表达的含义 希望了解的朋友能不吝赐教。9.TEMPLATE语法 re.TEMPLATE 或简写为 re.T作用 猪哥也没搞懂TEMPLATE的具体用处源码注释中写着 disable backtracking(禁用回溯)有了解的同学可以留言告知10. 常量总结9个常量中前5个(IGNORECASE、ASCII、DOTALL、MULTILINE、VERBOSE)有用处两个(LOCALE、UNICODE)官方不建议使用、两个(TEMPLATE、DEBUG)试验性功能不能依赖。常量在re常用函数中都可以使用查看源码可得知。常量可叠加使用因为常量值都是2的幂次方值所以是可以叠加使用的叠加时请使用 | 符号请勿使用 符号最后来一张思维导图总结一下re模块中的常量吧 需要高清图或者xmind文件的同学可在文章末尾获取。三、re模块函数re模块有12个函数猪哥将以功能分类来讲解这样更具有比较性同时也方便记忆。1.查找一个匹配项查找并返回一个匹配项的函数有3个 search、match、fullmatch 他们的区别分别是search 查找任意位置的匹配项match 必须从字符串开头匹配fullmatch 整个字符串与正则完全匹配我们再来根据实际的代码案例比较案例1:案例1中 search函数 是在字符串中任意位置匹配只要有符合正则表达式的字符串就匹配成功其实有两个匹配项但search函数值返回一个。而 match函数 是要从头开始匹配而字符串开头多了个字母 a 所以无法匹配 fullmatch函数 需要完全相同故也不匹配案例2:案例2删除了text最开头的字母a这样 match函数 就可以匹配啦而 fullmatch函数 依然不能完全匹配案例3:案例3中我们只留下一段文字并且与正则表达式一致这时 fullmatch函数 终于可以匹配了。完整案例注意查找 一个匹配项 返回的都是一个匹配对象(Match)。2.查找多个匹配项讲完查找一项现在来看看查找多项吧查找多项函数主要有 findall函数 与 finditer函数 findall 从字符串任意位置查找 返回一个列表finditer 从字符串任意位置查找 返回一个迭代器两个方法基本类似只不过一个是返回列表一个是返回迭代器。我们知道列表是一次性生成在内存中而迭代器是需要使用时一点一点生成出来的内存使用更优。如果可能存在大量的匹配项的话建议使用 finditer函数 一般情况使用 findall函数 基本没啥影响。3.分割re.split(pattern, string, maxsplit0, flags0) 函数用 pattern 分开 string maxsplit 表示最多进行分割次数 flags 表示模式就是上面我们讲解的常量注意 str 模块也有一个 split函数 那这两个函数该怎么选呢str.split函数功能简单不支持正则分割而re.split支持正则。关于二者的速度如何 猪哥实际测试了一下在相同数据量的情况下使用 re.split 函数与 str.split函数 执行次数 与 执行时间 对比图通过上图对比发现1000次循环以内 str.split 函数更快而循环次数1000次以上后 re.split 函数明显更快而且次数越多差距越大所以结论是 在 不需要正则支持 且 数据量和数次不多 的情况下使用 str.split 函数更合适反之则使用 re.split 函数 。注具体执行时间与测试数据有关4.替换替换主要有 sub函数 与 subn函数 他们功能类似先来看看 sub函数 的用法re.sub (pattern, repl, string, count0, flags0) 函数参数讲解repl替换掉string中被pattern匹配的字符 count表示最大替换次数flags表示正则表达式的常量。值得注意的是 sub函数 中的入参 repl替换内容既可以是字符串也可以是一个函数哦 如果repl为函数时只能有一个入参Match匹配对象。re.subn(pattern, repl, string, count0, flags0)函数与 re.sub函数 功能一致只不过返回一个元组 (字符串, 替换次数)。5.编译正则对象compile函数与 template函数 将正则表达式的样式编译为一个 正则表达式对象 (正则对象Pattern)这个对象与re模块有同样的正则函数(后面我们会讲解Pattern正则对象)。而 template函数 与 compile函数 类似只不过是增加了我们之前说的 re.TEMPLATE 模式我们可以看看源码。6.其他re.escape(pattern) 可以转义正则表达式中具有特殊含义的字符比如 . 或者 *举个实际的案例re.escape(pattern) 看似非常好用省去了我们自己加转义但是使用它很容易出现转义错误的问题所以并不建议使用它转义 而建议大家自己手动转义 re.purge() 函数作用就是清除 正则表达式缓存具体有什么缓存呢我们来看看源码就知道它背地里干了 什么看方法大概是清除缓存吧我们再来看看具体的案例猪哥在两个案例之间使用了 re.purge() 函数清除缓存然后分别比较前后案例源码里面的缓存看看是否有变化7.总结同样最后来一张思维导图总结一下re模块中的函数吧 需要高清图或者xmind文件的同学可在末尾获取。四、re模块异常re模块还包含了一个正则表达式的编译错误当我们给出的 正则表达式是一个无效的表达式(就是表达式本身有问题)时就会raise一个异常我们来看看具体的案例吧上图案例中我们可以看到在编写正则表达式中我们多写了一个后括号这导致执行结果报错而且是在 其他所有案例执行之前 所以说明是在正则表达式编译时期就报错了。注意这个异常一定是 正则表达式 本身是无效的与要匹配的字符串无关五、正则对象Pattern关于 re 模块的常量、函数、异常我们都讲解完毕但是完全有必要再讲讲 正则对象Pattern。1. 与re模块 函数一致在 re 模块的函数中有一个重要的函数 compile函数 这个函数可以预编译返回一个正则对象此正则对象拥有与 re模块相同的函数我们来看看 Pattern类 的源码。既然是一致的 那到底该用 re模块 还是 正则对象Pattern 而且有些同学可能看过 re模块的源码你会发现其实 compile函数 与 其他 re函数 (search、split、sub等等) 内部调用的是同一个函数最终还是调用正则对象的函数也就是说下面 两种代码写法底层实现 其实是一致的# re函数re.search(pattern, text)# 正则对象函数compile re.compile(pattern)compile.search(text)那还有必要使用 compile函数 得到正则对象再去调用 search函数 吗直接调用re.search 是不是就可以2. 官方文档怎么说关于到底该用 re模块 还是 正则对象Pattern 官方文档是否有说明呢官方文档推荐 在多次使用某个正则表达式时推荐使用正则对象Pattern 以增加复用性因为通过 re.compile(pattern) 编译后的模块级函数会被缓存3. 实际测试又如何上面官方文档推荐我们在 多次使用某个正则表达式时使用正则对象 那实际情况真的是这样的吗我们再实测一下吧猪哥编写了两个函数一个使用 re.search函数 另一个使用 compile.search函数 分别(不同时)循环执行 count次 (count从1-1万)比较两者的耗时得出的结果猪哥绘制成折线图得出的结论是100次循环以内两者的速度基本一致当超出100次后使用 正则对象Pattern 的函数 耗时明显更短所以比 re模块 要快通过实际测试得知 Python 官方文档推荐 多次使用某个正则表达式时使用正则对象函数 基本属实 六、注意事项Python 正则表达式知识基本讲解完毕最后稍微给大家提一提需要注意的点。1.字节串 与 字符串模式和被搜索的字符串既可以是 Unicode 字符串 (str) 也可以是8位字节串 (bytes)。但是Unicode 字符串与8位字节串不能混用2.r 的作用正则表达式使用反斜杠(’\’)来表示特殊形式或者把特殊字符转义成普通字符。而反斜杠在普通的 Python 字符串里也有相同的作用所以就产生了冲突。解决办法是对于正则表达式样式使用 Python 的原始字符串表示法在带有 ‘r’ 前缀的字符串字面值中反斜杠不必做任何特殊处理。3.正则查找函数 返回匹配对象查找一个匹配项(search、match、fullmatch)的函数返回值都是一个 匹配对象Match 需要通过 match.group() 获取匹配值这个很容易忘记。另外还需要注意 match.group() 与 match.groups() 函数的差别 4.重复使用某个正则如果要重复使用某个正则表达式推荐先使用 re.compile(pattern)函数 返回一个正则对象然后复用这个正则对象这样会更快5.Python 正则面试笔试可能会遇到需要使用Python正则表达式不过不会太难的大家只要记住那几个方法的区别会正确使用基本问题不大。近期有很多朋友通过私信咨询有关Python学习问题。为便于交流点击蓝色自己加入讨论解答资源基地返回搜狐查看更多责任编辑
http://www.zqtcl.cn/news/173533/

相关文章:

  • 永康物流网站蒙牛企业网站建设规划书
  • 网站开发发和后台开发有什么区别马鞍山网站建设价格
  • 广州建设银行预约公积金网站怎么下载ppt免费模板
  • 网站策划的基本过程网站设置在哪
  • 内蒙古住房和城乡建设网站网站建设需要购买什么
  • 网站做调查问卷给钱的兼职南通营销网站制作
  • 开个微网站需要什么自己制作网页的步骤
  • 有专业做线切割配件的网站吗中国婚恋网站排名
  • 做ppt网站大全中国工程建设信息网站
  • 汉滨区住房和城乡建设局网站淘宝客购物网站的怎么做
  • 一个网站用多个域名分页网站
  • 门户网站举例phpstuy wordpress
  • 做网站许昌美业管理软件系统排名
  • 温州市建设工程质量安全管理总站贵阳最新消息今天
  • 成都服装网站建设工作是否能给我们带来快乐
  • 电商网站建设综述长沙高端网站建设
  • 网站建设有哪些环节怎么申请网址
  • 做网站要什么软件经典网站首页
  • 个人网站备案转公司备案长沙网站seo报价
  • 上海网站开发建设电话电影vip网站建设步骤
  • 17.zwd一起做网站池尾站邢台快用网络科技有限公司
  • 做写字楼租赁用什么网站好如何申请网站com域名
  • 如何查询网站服务商安徽省建设厅证件查询安全员c证
  • asp网站怎么安装程序员wordpress插件
  • 池州网站建设哪家好郑州seo网站管理
  • 我要建个人网站国外免备案虚拟主机
  • 自建站 外贸做旅游网约车的网站
  • 网站关键词优化排名软件东莞网站建设图表
  • 为企业设计网站微信开放平台的发展前景
  • 苏州高端做网站软件开发流程图例子