十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
正则表达式在程序开发中会经常用到,比如数据(格式)验证、替换字符内容以及提取字符串内容等等情况都会用到,但是目前许多开发人员对于正则表达式只是处于了解或者是基本会用的阶段。一旦遇到大批量使用正则表达式的情况(例如网络爬虫)可以说基本上就抓瞎了。这篇文章我将带领大家利用 Python 来学习一下正则表达式。在阅读这篇文章前你需要掌握 Python 基础知识,或者具有其他开发语言的基础知识也可以,因为基本上每种语言使用正则表达式的方式都是类似的。
成都网站设计、成都做网站的开发,更需要了解用户,从用户角度来建设网站,获得较好的用户体验。创新互联公司多年互联网经验,见的多,沟通容易、能帮助客户提出的运营建议。作为成都一家网络公司,打造的就是网站建设产品直销的概念。选择创新互联公司,不只是建站,我们把建站作为产品,不断的更新、完善,让每位来访用户感受到浩方产品的价值服务。零、正则表达式基础
1.提取字符(串) 有时我们需要从一个字符串中获取一段内容,这段内容可能是一个字符也可能是一段字符串,如果用逐字对比遍历的话不仅耗时耗力而且还容易出错。那么这个时候我们就可以用到正则表达式中的 字符匹配 功能。正则表达式为我们提供了 4 种字符匹配的方法,见下表:
语法 | 说明 | 例子 | 可匹配字符串 |
---|---|---|---|
. | 匹配除了换行符 “\n” 以外的任意字符 | a.b | acb、adb、a2b、a~b |
\ | 转义,将转移字符后面的一个字符改变原来的意思 | a[b\.\\]c | abc、a.c、a\c |
[] | 匹配括号内的任意字符 | a[b,c,d,e]f | abd、acf、adf、aef |
[^] | 除了括号内的字符外,其他的字符都匹配 | aa,b,c,d,ef | a1f、a#f、azf、agf |
2.预定义字符 所谓预定义字符就是正则表达式中为我们预留的专门用来匹配格式化内容的字符,例如匹配数字用的 \d 和匹配空白符的 \s 等等。我们可以利用预定义字符快速的匹配出一个字符串中符合要求的内容。预定义字符匹配的内容,同样也可以利用前面所讲的字符匹配的方式匹配出来,但是代码量会相对来说多一点。下表所列的就是预定义字符:
语法 | 说明 | 例子 | 可匹配字符串 |
---|---|---|---|
^ | 以什么字符串开始 | ^123 | 123abc、123321、123zxc |
$ | 以什么字符串结尾 | 123$ | abc123、321123、zxc123 |
\b | 匹配单词边界,不匹配任何字符 | \basd\b | asd |
\d | 匹配数字0-9 | zx\dc | zx1c、zx2c、zx5c |
\D | 匹配非数字 | zx\Dc | zxvc、zx$c、zx&c |
\s | 匹配空白符 | zx\sc | zx c |
\S | 匹配非空白符 | zx\Sc | zxac、zx1c、zxtc |
\w | 匹配字母、数字和下划线 | zx\wc | zxdc、zx1c、zx_c |
\W | 匹配非字母、数字和下划线 | zx\Wc | zx c、zx$c、zx(c |
在预定义字符中有如下几点需要注意:
3.限制数量 在某些情况下我们需要匹配重复的内容,这时我们可以使用 数量限定 模式来进行操作。数量限定如下表:
语法 | 说明 | 例子 | 可匹配字符串 |
---|---|---|---|
* | 匹配0到多次 | zxc* | zx、zxccccc |
+ | 匹配1次到多次 | zxc+ | zxc、zxccccc |
? | 匹配0次或1次 | zxc? | zxc、zx |
{m} | 匹配m次 | zxc{3}vb | zxcccvb |
{m,} | 匹配m次或多次 | zxc{3,}vb | zxcccvb、zxccccccccvb |
{,n} | 匹配0次到n次 | zxc{,3}vb | zxvb、zxcvb、zxccvb、zxcccvb |
{m,n} | 匹配m次到n次 | zxc{1,3} | zxcvb、zxccvb、zxcccvb |
4.断言 断言,又称零宽断言,指的是当断言表达式为 True 时才进行匹配,但是并不匹配断言表达式内容。和 ^ 代表开头, $ 代表结尾, \b 代表单词边界一样,先行断言和后行断言也有类似的作用,它们只匹配某些位置,在匹配过程中,不占用字符,所以被称为零宽。所谓位置,是指字符串中第一个字符的左边、最后一个字符的右边以及相邻字符的中间。零宽断言表达式有四种:
5.贪婪/非贪婪 正则表达式会尽可能多的去匹配字符,这被称为贪婪模式,贪婪模式是正则表达式默认的模式。但是有时候贪婪模式会给我们造成不必要的困扰,例如我们要匹配字符串 “Jack123Chen123Chen” 中的 “Jack123Chen”,但是贪婪模式匹配出的却是 “Jack123Chen123Chen”,这时我们就需要用到非贪婪模式来解决这个问题,非贪婪模式常用的表达式如下:
语法 | 说明 |
---|---|
*? | 匹配0次或多次,但要尽可能少重复 |
+? | 匹配1次或多次,但要尽可能少重复 |
?? | 匹配0次或1次,但要尽可能少重复 |
{m,}? | 匹配m次或多次,但要尽可能少重复 |
{m,n}? | 匹配m次或n次,但要尽可能少重复 |
6.其他 上述内容在正则表达式中都是常用的,下面我们再来看看不常用到的,但是功能同样强大的语法。
一、Python 使用正则表达式
在 Python 中使用正则表达式很简单,re 模块向我们提供了正则表达式的支持。使用步骤一共三步:
在 Python 中我们常用的 re 的方法有六种,分别是: compile 、 match 、 search 、 findall 、 split 和 sub ,下面就针对这六种方法进行一下讲解。
compile compile 方法的作用是将正则表达式字符串转化为 Pattern 实例,它具有两个参数 pattern 和 flags ,pattern 参数类型是 string 类型,接收的是正则表达式字符串,flags 类型是 int 类型,接收的是匹配模式的编号,flags 参数是非必填项,默认值为 0 (忽略大小写)。flags 匹配模式有如下 6 种:
匹配模式 | 说明 |
---|---|
re.I | 忽略大小写 |
re.M | 多行匹配模式 |
re.S | 任意匹配模式 |
re.L | 预定义字符匹配模式 |
re.U | 限定字符匹配模式 |
re.V | 详细模式 |
上述六种模式在实际开发中很少用到,我们只需要了解即可。 使用 compile 很简单,如下:
import re pattern = re.compile(r'\d')
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。