目录

  • Regular是什么
  • 先认识3个对称号
  • [ ]
    • 元字符(匹配的快捷方法)
    • # ^...$
    • 字符转义
    • 自定义字符
    • 反义字符 (大写)
  • { }
  • ( )
    • 案例-匹配同样模式ip段:
    • 案例-多个分组 选择字符类 功能:
  • 分枝条件
  • 断言
  • 对称压栈
  • 案例
    • 案例1-获取html文本里面token
    • 案例2-获取html里面的注释


Regular是什么

使用上和SQL有点像;

不同的数据库产品使用的语句都有差别,但是标准是SQL;
Regular也一样,不同的Regular引擎产品所执行的语句会有小差异,但是标准是一样的。

先认识3个对称号

will learn Regular , The best way is to remember three.

符号 说明
[ ] [ x ] 内是需要匹配的字符 .
{ } {c1,c2} 内是指定匹配字符的数量 。
( ) 重复多个字符的方法

需要匹配的时候,区分要匹配的字符里面所有字符格式是不是都一致,不一致的话,建议从最内部的开始匹配,逐渐向外。

[ ]

[ x ] 内是需要匹配的字符 .

元字符(匹配的快捷方法)

代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字 [a-z0-9A-Z_] + [\u4e00-\u9fa5]“(有些引擎可能用) ”
\s 匹配任意的空白符
\d 匹配数字 [0-9]
\b 匹配单词的开始或结束 ^ or $

下面是一些使用重复的例子:

Windows\d+ 匹配Windows后面跟1个或更多数字

^\w+ 匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)

# ^...$

代码 说明
^ 匹配字符串的开始
$ 匹配字符串的结束

\b 类似;

\b --- 代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置

字符转义

如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用.和*。当然,要查找\本身,你也得用\.

例如:
unibetter\.com 匹配 unibetter.com
C:\\Windows 匹配 C:\Windows

自定义字符

如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?

很简单,你只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)。

反义字符 (大写)

有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:

代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

例子:\S+匹配不包含空白符的字符串。

<a[^>]+>匹配用尖括号括起来的以a开头的字符串。

{ }

{c1,c2} 内是指定匹配字符的数量 , 贪婪与懒惰

符号 说明
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

( )

匹配 重复多个字符的方法

上面说的都是怎么重复单个字符,就是直接在字符后门加上限定符就行了。

需求 Q:如果想重复多个字符怎么做?

A:可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。

案例-匹配同样模式ip段:

192.168.0.1

(\d{1,3}\.){3}\d{1,3} 是一个简单的IP地址匹配表达式
请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})

案例-多个分组 选择字符类 功能:

上面的表达式也能匹配到 256.300.888.999 这种不可能存在的IP地址,(最大255)

如果能使用算术比较的话,或许能简单地解决这个问题。

列举出正确的ip段.......

但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

分枝条件

我们需要用到分枝条件。正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。听不明白?没关系,看例子:

0\d{2}-\d{8}|0\d{3}-\d{7} 这个表达式能匹配两种模式:

一种是三位区号,8位本地号(如010-12345678)

一种是4位区号,7位本地号(0376-2233445)。

断言

待续...

对称压栈

待续...

案例

案例1-获取html文本里面token

html文本:

<div class="r" style="margin-top: 20px; margin-right: 0px; margin-left: 240px; padding: 0px; float: center;"><form id="form" method="post" action="http://fjmsxw.cmbc.com.cn/feedback.html"><input type="hidden" name="formToken" value="nyFUzIwxTKygVehq"><div style="margin-top:10px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标题: <input type="text" style="line-height: 26px; height: 26px" id="title" name="title" value="" placeholder="标题">&nbsp;*必填<form:errors path="command.title" element="span" cssClass="error-label" /></div>

code:


#1. 获取全部类似,用list返回
tokens = re.findall("value=\"(\w*?)\"", r.text)
print(tokens)
print(tokens[0])#2. 获取全部类似,用list返回
tokens = re.findall("value=\"[\w]{16}\"", reponse2)
print(tokens)
tokens2 = tokens[0][8:-1]
print(tokens2)
// nyFUzIwxTKygVehq

案例2-获取html里面的注释

不能匹配到嵌套;

html文本:

<body><!-- 插件css -->
<link rel="stylesheet" type="text/css" href="https://static2.ichunqiu.com/icq/resources/css/plugin/bootstrap.min.css?v=4cd0c71d98" />
<link rel="stylesheet" type="text/css" href="https://static2.ichunqiu.com/icq/resources/css/plugin/jquery.mCustomScrollbar.min.css" />
<!-- 公共css -->
<link rel="stylesheet" type="text/css" href="https://static2.ichunqiu.com/icq/resources/css/common/component.css?v=f61ce4f93f"/>
<!-- 头部css -->
<link rel="stylesheet" type="text/css" href="https://static2.ichunqiu.com/icq/resources/css/common/header.css?v=15b4905471"/>
<!--企安殿4.0新用户登陆css-->
<link rel="stylesheet" type="text/css" href="https://static2.ichunqiu.com/icq/resources/css/company/qad/qadfyd.css"/>
<!--用户体系小I-->
<link rel="stylesheet" type="text/css" href="https://static2.ichunqiu.com/icq/resources/css/IRD/IRD-i.css?v=bb644b03ae5da915505e3f6da2d08d46"/>
<link rel="stylesheet" type="text/css" href="https://static2.ichunqiu.com/icq/resources/css/IRD/robot.css?v=bb644b03ae5da915505e3f6da2d08d46"/>
<!--[if IE 8]>
<style>

code:

<!--[\w\s.]{0,}-->

结果:

<!-- 插件css -->
<!-- 公共css -->
<!-- 头部css -->
<!--企安殿4.0新用户登陆css-->
<!--用户体系小I-->

转载于:https://www.cnblogs.com/mysticbinary/articles/10766831.html

Python使用Regular入门相关推荐

  1. python爬虫从入门到实战笔记——第四章Scrapy框架

    推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...

  2. python数据分析从入门到精通电子工业出版社_荐书丨Python数据分析从入门到精通...

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 采用Python 3.6版本,兼容Python 3.X等众多版本 一本书搞定IPy ...

  3. python入门必备指南-致Python初学者 Anaconda入门使用指南完整版

    打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...

  4. python快速编程入门课后程序题答案-Python编程从零基础到项目实战 完整PPT+习题答案...

    Python编程从零基础到项目实战是一本介绍Python相关知识的Python基础教程,内容涉及算法.Python数据分析.图形处理.Web开发.科学计算.项目管理.人工智能.Python爬虫等.其中 ...

  5. python零基础入门教程视频下载-Python零基础入门学习视频教程全42集,资源教程下载...

    课程名称 Python零基础入门学习视频教程全42集,资源教程下载 课程目录 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小 ...

  6. python基础教程视频教程百度云-Python零基础入门学习视频教程全42集百度云网盘下载...

    课程简介 Python零基础入门学习视频教程全42集百度云网盘下载 课程目录 042魔法方法:算术运算 041魔法方法:构造和析构 040类和对象:一些相关的BIF 039类和对象拾遗 038类和对象 ...

  7. python编程从入门到精通 叶维忠 pdf-零基础如何学习python?十本精品python书籍推荐...

    你想要学习python编程,却不知道该看哪本书?今天小编精选了学习python的十本精品书籍,并且还编写了推荐理由分享给你,希望可以给有选择困难症的同学一点帮助! 1.<"笨办法学&q ...

  8. python零基础入门教程学习要多久-廖雪峰python教程要学多久-零基础学Python需要多久...

    零基础学python大约需要多久 看不同的人,不同的学习能和基础. 像我通java,vc ,javascript,groovy,vb,c 接触过c#,delphi,asp,E语言, 用过dreamwa ...

  9. python编程从入门到精通 叶维忠 pdf-叶维忠《Python编程从入门到精通》PDF

    叶维忠<Python编程从入门到精通>PDF 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python编程从入门到精通 作 者 :叶维忠编著 出版发行 : 北京 ...

  10. python新手项目-推荐:一个适合于Python新手的入门练手项目

    原标题:推荐:一个适合于Python新手的入门练手项目 随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人 ...

最新文章

  1. 使用selenium和pyquery爬取京东商品列表
  2. 【leetcode】ZigZag Conversion
  3. PHP中include与require的特点和区别说明
  4. linux ftp 150 无响应,FTP遇到150无响应
  5. 全球Top10最佳移动统计分析sdk
  6. Atitit 数据库抽象层jdbc pdo ado.net等比较与异常点 目录 1. 应该具有的功能 1 1.1. 元数据 API 1 1.2. 分布式事务 vs事务中使用 Savepoint 1
  7. 恶作剧:被乔布斯整蛊也很快乐
  8. 超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术(附PPT和回放视频)
  9. 微信小程序登陆(两种写法)
  10. python idle使用_Python IDLE 基本操作
  11. 哪几种MM最受男孩喜欢?(组图)
  12. 微信投票软件制作代码
  13. 服饰Clothing
  14. beeline 查询表数据导出到本地文件csv
  15. 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人
  16. 软件测试基础篇1--探索式软件测试中用到的一些方法
  17. linux当中shadow文件的作用,解释Linux中passwd与shadow文件
  18. 百度新闻推荐真的在推荐新闻吗
  19. Go Web 编程 (一) - 快速入门
  20. MATLAB出现“变量似乎要更改脚本中每个循环迭代的大小。请考虑对速度进行预分配。”警告如何解决...

热门文章

  1. Android仿人人客户端(v5.7.1)——新鲜事之状态
  2. 货币的未来取决于打破关于货币历史的虚构谎言
  3. excel使用技巧手记
  4. 谷歌神经网络机器翻译NMT:人人可利用TensorFlow快速建立翻译模型
  5. java写一个泡泡龙小游戏
  6. fastapi之tortoise-orm
  7. 高通apq8096连接外网
  8. cd40系列芯片_CD40系列芯片大全
  9. 如何免费将office文档转成PDF的几种方法
  10. HTML的表格边框的合并