Python 2.7 正则中篇

前言

本篇文章的主要内容是使用Python匹配ASCII字符串的各种姿势。

基本知识

ASCII码对照表.

元字符对照表

什么是元字符

如上面元字符对照表里的所有字符在正则中表现是一个范围而不能作为字符匹配,例如[0-9]之中的-用来表示0到9的一个范围,而不能匹配横线字符。

什么是转义

像$、^ 这类元字符,在正则中有特殊的含义,有的时候并不需要表示其特殊含义只想表示普通字符的含义,此时就必须对元字符做转义,可以使用反斜杠转义元字符,如^经过转义后变为 \ ^。

详细解读正则的使用

测试页面

将以上代码保存为test.txt

将以上代码保存为test.py用来测试正则表达式的功能。

功能解释

获取代码中的手机号

正则表达式可以有如下集中方式:

1 ([0-9]{11})

2 (\d{11})

3 ([\x30-\x40]{11})

分别使用以上正则进行测试,如下图:

由上可知,表示数字有三中方式分别是[0-9]、\d、[\x30-\x40],数字0的ASCII值在表中查出是48,转为十六进制为30,同理9的ASCII值的十六进制是40,所以就有了[\x30-\x40]的用法,通过这种方式我们可以匹配任意ASCII码表中的字符。下面我们试着匹配测试文件中的冒号,结果如下:

花括号的用法在元字符表中有三中方式,测试结果如下:

括号作用是把括号内的表达式做子表达式来用,在元字符表中有四种用法,测试结果如下:

对于这个测试结果,后面三中不是很理解,希望有懂得给我讲讲。

中括号的作用是表示字符的范围,在元字符表中有四种用法,测试结果如下:

测试发现,[a-d]与[abcd]的结果一样,[a-z]与[abcd]的结果一样,前面的作用就是获取包含adcd的字符串,后面的作用就是获取不包含abcd的字符串。

获取源文件中的邮箱

测试结果如下:

由测试结果可以看出来,\w和[a-zA-Z0-9]的作用是一样的,相比之下*和+的结果一样,但是他们稍微又一点不同就是 *表示为可以没有,而+为至少匹配一个。而 *又等同于{0,},+等同于{1,}。由于\s的作用是匹配空白字符,所以结果中虽然出现了邮箱地址,但是后面多了一个标签,由于邮箱开始处有空格而结尾处没有空白字符,所以出现这样的结果。还有就是[^\s]与[\S]的结果是一样的,\s与\S是互反的关系。测试中的点号前面加了反斜杠,由于点号是元字符可以替代任何除了空行以外的所有字符,所有使用反斜杠来对其进行转义来匹配点号,其他元字符用法类似。

一个正则获取woshi和myh0st

测试结果如下;

由于woshi和myh0st之间有几个空行,所以可以用\n和\s匹配空行。\f、\v、\r、\t用法相同。

获取所有链接

测试结果如图:

我们看到有问号,问号是个量词,表示最多一个,也可能不出现。这个就与{0,1}的作用相同了。

获取文字的标签名

测试结果如图:

\1的作用是对前面括号内获取的内容的引用,可以用在处理html页面的时候,获取标签名字的操作。

需要转义的字符

除了上面说的单独出现的元字符,小括号和中括号也需要转义。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2017-06-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端说吧

【本周面试题】第一周

1、location对象的search属性拿到url中的查询字符串。传到我们提前封装好的getSearch数组中(或者这一步可以也封装到函数中,但那样函数就只能...

6810
来自专栏耕耘实录

Bash shell中四种算术运算方式的区别与联系简介

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

8120
来自专栏数据结构与算法

P2085 最小函数值(minval)

题目描述 有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Aix^2+Bix+Ci (x∈N*)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数...

33550
来自专栏云霄雨霁

追踪收集解决方法

18000
来自专栏Golang语言社区

Golang语言--指针

在Go中指针是很容易学习的。一些进入编程任务,指针更容易操作,如通过引用调用,需要要使用指针来执行。所以学习指针成为完美Go程序员很有必要。让我们开始学习指针的...

373120
来自专栏我的博客

init,__construct区别以及PHP魔术方法大汇总

init()是框架设置为初始化函数,当然框架内部还是用的___construct()内置函数;如果你是框架开发者,你当然也可以把初始化函数写成__init(),...

34550
来自专栏前端进阶之路

从0到1实现Promise前言正文结束

Promise大家一定都不陌生了,JavaScript异步流程从最初的Callback,到Promise,到Generator,再到目前使用最多的Async/A...

13330
来自专栏程序员阿凯

java中“53”个关键字(含2个保留字)

17150
来自专栏用户2442861的专栏

Python中GBK, UTF-8和Unicode的编码问题

编码问题,一直是使用python2时的一块心病。几乎所有的控制台输入输出、IO操作和HTTP操作都会涉及如下的编码问题:

23810
来自专栏散尽浮华

python常用知识梳理

接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理: 1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ ...

31850

扫码关注云+社区

领取腾讯云代金券