专栏首页信安之路Python 2.7 正则中篇

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),作者:myh0st

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 还记得当年踏上信安之路的初衷吗

    一年前在信安之路的交流群里做了一个活动:在我们这个信息安全的圈子里,渗透测试仅仅是安全中的一个很小的分支,虽说这个圈子的缺口很大,但是为什么一直补不上这个缺口呢...

    信安之路
  • 这是一篇技术文

    这次活动参与的同学比较多,写出的内容也参差不齐,本来打算只要分享了的小伙伴,其内容都展示一次,毕竟是自己的所知所感,但是有两个朋友对我做出了建议,建议如下:

    信安之路
  • APT攻防之关于后门那些事

    这次继续围绕第一篇《第一季从攻击者角度来对抗》做整理与补充。在深入一步细化 demo notepad++。

    信安之路
  • python+requests+BeautifulReport+Jenkins接口自动化学习笔记

    Requests 库是一个优雅而简单的 Python HTTP 库,主要用于发送和处理 HTTP 请求。底层封装了 urllib3 库,并且提供了非常友好的 A...

    wencheng
  • 【AI测试】也许这有你想知道的人工智能 (AI) 测试--开篇

    大家看图中关于人工智能的定义。通俗点来说呢,就是 让机器实现原来只有人类才能完成的任务;比如看懂照片,听懂说话,思考等等。 很多人测试的同学会问,那人工智能是...

    测试开发社区
  • 唐敏豪:我给MSU评测打9分

    LiveVideoStack:唐敏豪你好,能否向LiveVideoStack的读者介绍下自己?

    LiveVideoStack
  • 软件测试新趋势 | TW洞见

    今日洞见 文章作者/图片来自ThoughtWorks:林冰玉。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网...

    ThoughtWorks
  • 功能自动化测试策略

    在与软件测试团队一起工作时,经常会发生功能测试BUG的情况,需要制定均衡的测试策略。模仿用户体验的测试策略有其自身的成本。如果组织仍在手动进行功能测试,通过实施...

    FunTester
  • 云币网及KYC【区块链生存训练】

    李笑来在7月5日发布了Press.One即将 ICO 的消息,大批小白开始在云币网注册开户,我的“区块链生存训练”饭团也在一夜之间加入了40多人。有位新人在饭团...

    申龙斌
  • Rust FFI 编程 - Rust导出共享库06

    本节主要介绍 Rust 导出共享库时,如何通过指针在 Rust 和 C 之间传递结构体。上一节的示例是结构体的内存在 C 端分配,本节介绍内存在 Rust 这边...

    MikeLoveRust

扫码关注云+社区

领取腾讯云代金券