Python使用Regular入门
目录
- 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;"> 标题: <input type="text" style="line-height: 26px; height: 26px" id="title" name="title" value="" placeholder="标题"> *必填<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入门相关推荐
- python爬虫从入门到实战笔记——第四章Scrapy框架
推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...
- python数据分析从入门到精通电子工业出版社_荐书丨Python数据分析从入门到精通...
点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 采用Python 3.6版本,兼容Python 3.X等众多版本 一本书搞定IPy ...
- python入门必备指南-致Python初学者 Anaconda入门使用指南完整版
打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...
- python快速编程入门课后程序题答案-Python编程从零基础到项目实战 完整PPT+习题答案...
Python编程从零基础到项目实战是一本介绍Python相关知识的Python基础教程,内容涉及算法.Python数据分析.图形处理.Web开发.科学计算.项目管理.人工智能.Python爬虫等.其中 ...
- python零基础入门教程视频下载-Python零基础入门学习视频教程全42集,资源教程下载...
课程名称 Python零基础入门学习视频教程全42集,资源教程下载 课程目录 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小 ...
- python基础教程视频教程百度云-Python零基础入门学习视频教程全42集百度云网盘下载...
课程简介 Python零基础入门学习视频教程全42集百度云网盘下载 课程目录 042魔法方法:算术运算 041魔法方法:构造和析构 040类和对象:一些相关的BIF 039类和对象拾遗 038类和对象 ...
- python编程从入门到精通 叶维忠 pdf-零基础如何学习python?十本精品python书籍推荐...
你想要学习python编程,却不知道该看哪本书?今天小编精选了学习python的十本精品书籍,并且还编写了推荐理由分享给你,希望可以给有选择困难症的同学一点帮助! 1.<"笨办法学&q ...
- python零基础入门教程学习要多久-廖雪峰python教程要学多久-零基础学Python需要多久...
零基础学python大约需要多久 看不同的人,不同的学习能和基础. 像我通java,vc ,javascript,groovy,vb,c 接触过c#,delphi,asp,E语言, 用过dreamwa ...
- python编程从入门到精通 叶维忠 pdf-叶维忠《Python编程从入门到精通》PDF
叶维忠<Python编程从入门到精通>PDF 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python编程从入门到精通 作 者 :叶维忠编著 出版发行 : 北京 ...
- python新手项目-推荐:一个适合于Python新手的入门练手项目
原标题:推荐:一个适合于Python新手的入门练手项目 随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人 ...
最新文章
- 使用selenium和pyquery爬取京东商品列表
- 【leetcode】ZigZag Conversion
- PHP中include与require的特点和区别说明
- linux ftp 150 无响应,FTP遇到150无响应
- 全球Top10最佳移动统计分析sdk
- Atitit 数据库抽象层jdbc pdo ado.net等比较与异常点 目录 1. 应该具有的功能	1 1.1. 元数据 API	1 1.2. 分布式事务 vs事务中使用 Savepoint	1
- 恶作剧:被乔布斯整蛊也很快乐
- 超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术(附PPT和回放视频)
- 微信小程序登陆(两种写法)
- python idle使用_Python IDLE 基本操作
- 哪几种MM最受男孩喜欢?(组图)
- 微信投票软件制作代码
- 服饰Clothing
- beeline 查询表数据导出到本地文件csv
- 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人
- 软件测试基础篇1--探索式软件测试中用到的一些方法
- linux当中shadow文件的作用,解释Linux中passwd与shadow文件
- 百度新闻推荐真的在推荐新闻吗
- Go Web 编程 (一) - 快速入门
- MATLAB出现“变量似乎要更改脚本中每个循环迭代的大小。请考虑对速度进行预分配。”警告如何解决...