当前位置: 首页 > 科技观察

Python正则表达式快速介绍

时间:2023-03-13 14:41:30 科技观察

【.com原稿】程序开发中经常会用到正则表达式,比如数据(格式)校验、字符内容替换、字符串内容提取等,但是目前很多开发人员只是处于理解或基本使用正则表达式的阶段。一旦遇到大量使用正则表达式的情况(比如网络爬虫),可以说你基本是瞎了眼。在这篇文章中,我将带领大家使用Python来学习正则表达式。在阅读本文之前,你需要具备Python的基础知识,或者其他开发语言的基础知识,因为基本上每种语言都以类似的方式使用正则表达式。零、正则表达式基础1.提取字符(字符串)有时候我们需要从字符串中获取一段内容,可能是字符也可能是字符串。功能强大且容易出错。那么这个时候我们就可以使用正则表达式中的字符匹配功能了。正则表达式为我们提供了4种字符匹配的方法,如下表所示:语法描述示例可以匹配字符串。匹配除换行符“\n”之外的任意字符a.bacb,adb,a2b,a~b\转的意思,改变移位字符a[b\.\\]cabc,a.c,a\c[]匹配括号内任意字符a[b,c,d,e]fabd,acf,adf,aef[^]除括号内字符外,其他字符匹配aa,b,c,d,efa1f,a#f,azf,agf2.预定义字符所谓预定义字符就是正则表达式公式中为我们保留的字符专门用于匹配格式化内容,比如\d匹配数字,\s匹配空格字符等。我们可以使用预定义的字符来快速匹配字符串中符合要求的内容。预定义字符匹配的内容也可以通过上述字符匹配方式进行匹配,但是代码量会相对多一些。预定义字符如下表所列:语法说明示例匹配字符串^以什么字符串开始^123123abc,123321,123zxc$以什么字符串结束123$abc123,321123,zxc123\b匹配字边界,不匹配任何字符\basd\basd\d匹配数字0-9zx\dczx1c,zx2c,zx5c\D匹配非数字zx??\Dczxvc,zx$c,zx&c\s匹配空白字符zx\sczxc\S匹配非-空白字符zx\Sczxac,zx1c,zxtc\w匹配字母、数字和下划线zx\wczxdc,zx1c,zx_c\W匹配非字母、数字和下划线zx\Wczxc,zx$c,zx(c预定义字符需要注意以下几点:\b只匹配一个位置,其中一侧是组成单词的字符,另一侧是非单词字符,字符串的开头或结尾,其中\b是零宽度。\w在不同编码语言中的匹配范围是不同的。在使用ASCII码的语言中匹配[a-zA-Z0-9],在使用Unicode码的语言中匹配[a-zA-Z0-9]和汉字、全角符号等特殊字符.3.限制数量在某些情况下我们需要匹配重复的内容,那么我们可以使用限制数量的方式来操作。数量限制如下表所示:语法说明匹配字符串示例*匹配0到多次zxc*zx,zxccccc+匹配1到多次zxc+zxc,zxccccc?匹配0次还是1次zxc?zxc,zx{m}匹配m次zxc{3}vbzxcccvb{m,}匹配zxc{3,}vbm次或更多次{m,n}匹配m次到n次zxc{1,3}zxcvb,zxccvb,zxcccvb4.Assertion断言也称为零宽度断言,是指当断言表达式为True时进行匹配,但不匹配断言表达式的内容。就像^表示开头、$表示结尾和\b表示单词边界一样,前瞻断言和后视断言具有类似的效果。它们只匹配某些位置,在匹配过程中不占用字符,所以称为零宽度。所谓位置是指字符串中第一个字符的左侧,最后一个字符的右侧,相邻字符的中间。零宽断言表达式有四种:零宽负向回溯断言(?