【Python3 爬虫】08_正则表达式(元字符与语法)
元字符表
| 符号 | 说明 | 示例 |
| . | 表示任意字符 | 'abc' >>>'a.c' >>>结果为:'abc' |
| ^ | 表示字符开头 | 'abc' >>>'^abc' >>>结果为:'abc' |
| $ |
表示字符串结尾 |
'abc' >>>'abc$' >>>结果为:'abc' |
| *, +, ? |
'*'表示匹配前一个字符重复 0 次到无限次,'+'表示匹配前一个字符重复 1次到无限次,'?'表示匹配前一个字符重复 0 次到1次 |
'abcccd' >>>'abc*' >>>结果为:'abccc' 'abcccd' >>>'abc+' >>>结果为:'abccc' 'abcccd' >>>'abc?' >>>结果为:'abc' |
| *?, +?, ?? | 前面的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后面加?号使其变成惰性匹配即非贪婪匹配 |
'abc' >>>'abc*?' >>>结果为:'ab' 'abc' >>>'abc??' >>>结果为:'ab' 'abc' >>>'abc+?' >>>结果为:'abc' |
| {m} |
匹配前一个字符 m 次 |
'abcccd' >>>'abc{3}d' >>>结果为:'abcccd' |
| {m,n} | 匹配前一个字符 m 到 n 次 | 'abcccd' >>> 'abc{2,3}d' >>>结果为:'abcccd' |
| {m,n}? | 匹配前一个字符 m 到 n 次,并且取尽可能少的情况 | 'abccc' >>> 'abc{2,3}?' >>>结果为:'abcc' |
| \ | 对特殊字符进行转义,或者是指定特殊序列 | 'a.c' >>>'a\.c' >>> 结果为: 'a.c' |
| [] | 表示一个字符集,所有特殊字符在其都失去特殊意义,只有: ^ - ] \ 含有特殊含义 | 'abcd' >>>'a[bc]' >>>结果为:'ab' |
| | | 或者,只匹配其中一个表达式 ,如果|没有被包括在()中,则它的范围是整个正则表达式 |
'abcd' >>>'abc|acd' >>>结果为:'abc' |
| ( … ) | 被括起来的表达式作为一个分组. findall 在有组的情况下只显示组的内容 | 'a123d' >>>'a(123)d' >>>结果为:'123' |
| (?#...) |
注释,忽略括号内的内容 特殊构建不作为分组 |
'abc123' >>>'abc(?#fasd)123' >>>结果为:'abc123' |
| (?= … ) | 表达式’…’之前的字符串,特殊构建不作为分组 | 在字符串’ pythonretest ’中 (?=test) 会匹配’ pythonre ’ |
| (?!...) |
后面不跟表达式’…’的字符串,特殊构建不作为分组 |
如果’ pythonre ’后面不是字符串’ test ’,那么 (?!test) 会匹配’ pythonre ’ |
| (?<= … ) | 跟在表达式’…’后面的字符串符合括号之后的正则表达式,特殊构建不作为分组 | 正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’ def ’ |
| (?:) | 取消优先打印分组的内容 |
'abc' >>>'(?:a)(b)' >>>结果为'[b]' |
| ?P<> | 指定Key | 'abc' >>>'(?P<n1>a)>>>结果为:groupdict{n1:a} |
元字符分类
- 任意匹配元字符
- 边界限制元字符
- 限定符
- 模式选择符
- 模式单元
①任意匹配元字符
#-*- codingn:utf-8 -*-
import re
pattern = 'abc'
print("结果:%s"%re.search('a.c',pattern))

②边界限制元字符
边界限制符,’^’匹配字符串的开始,使用’$’匹配字符串的结束
#-*- codingn:utf-8 -*-
import re
pattern1 = 'Hello'
print("结果1:%s"%re.search('^H',pattern1))
print("结果2:%s"%re.search('o$',pattern1))
运行结果

③限定符
常见的限定符包括*、?、+、{n}、{n,}、{n,m}
#-*- codingn:utf-8 -*-
import re
pattern1 = 'mnjsassssh'
print("结果1:%s"%re.search('as{2}',pattern1))
print("结果2:%s"%re.search('as{3}',pattern1))
print("结果3:%s"%re.search('as{2,}',pattern1))
运行结果:

④模式选择符
模式选择符’|’
使用模式选择符,可以设置多个模式,匹配时,可以从中选择任意一个模式匹配。
#-*- codingn:utf-8 -*-
import re
pattern1 = 'mnjsassssh'
print("结果1:%s"%re.search('mn|ok',pattern1))
运行结果:
⑤模式选择符
模式单元符(),可以使用’()’将一些原子组合成一个大原子使用,小括号括起来的部分会被当做一个整体去使用
#-*- codingn:utf-8 -*-
import re
pattern1 = 'mnjsassssh'
print("结果1:%s"%re.search('(ss){1,}',pattern1)) #ss至少出现一次
print("结果2:%s"%re.search('(ss){1}',pattern1)) #ss出现一次
print("结果3:%s"%re.search('as{1,}',pattern1)) #a字母后的s至少出现一次
print("结果4:%s"%re.search('as{1}',pattern1)) #a字母后的s出现一次
运行结果:

【Python3 爬虫】08_正则表达式(元字符与语法)的更多相关文章
- [Python] 网络爬虫和正则表达式学习总结
以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...
- python 3.x 爬虫基础---正则表达式
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...
- javascript中正则表达式的基础语法
× 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...
- php正则表达式的基本语法
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例 如,vi编辑器,Perl或PHP脚本语言,以及awk或sed sh ...
- php正则表达式入门-常用语法格式
php正则表达式入门-常用语法格式 原文地址:http://www.jbxue.com/article/24467.html 分享下php正则表达式中的一些常用语法格式,用于匹配字母.数字等,个人感觉 ...
- Sed 命令详解 正则表达式元字符
1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...
- 玩转python爬虫之正则表达式
玩转python爬虫之正则表达式 这篇文章主要介绍了python爬虫的正则表达式,正则表达式在Python爬虫是必不可少的神兵利器,本文整理了Python中的正则表达式的相关内容,感兴趣的小伙伴们可以 ...
- 笔趣看小说Python3爬虫抓取
笔趣看小说Python3爬虫抓取 获取HTML信息 解析HTML信息 整合代码 获取HTML信息 # -*- coding:UTF-8 -*- import requests if __name__ ...
- Python3爬虫系列:理论+实验+爬取妹子图实战
Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...
- python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题
当用python3做爬虫的时候,一些网站为了防爬虫会设置一些检查机制,这时我们就需要添加请求头,伪装成浏览器正常访问. header的内容在浏览器的开发者工具中便可看到,将这些信息添加到我们的爬虫代码 ...
随机推荐
- (八)MySQL索引操作
(1)准备环境 mysql> create table t1(id int,name varchar(50)); mysql> \d $$ mysql> create procedu ...
- 【转】python argparse用法总结
转自:https://www.jianshu.com/p/fef2d215b91d 1. argparse介绍 是python的一个命令行解析包,非常编写可读性非常好的程序 2. 基本用法 prog. ...
- linux中Firefox浏览器 手动安装 flash
打开firefox浏览器,当你打开有关音频或者视频的网站时候,会提示你安装 flash,可是,官网提示,需要手动安装. 1.先从提示的官网上下载好文件 “install_flash_player_11 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)
求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...
- LCA【SP913】Qtree - Query on a tree II
Description 给定一棵n个点的树,边具有边权.要求作以下操作: DIST a b 询问点a至点b路径上的边权之和 KTH a b k 询问点a至点b有向路径上的第k个点的编号 有多组测试数据 ...
- 循环节(BFS)
循环节 时间限制: 1 Sec 内存限制: 64 MB提交: 56 解决: 16[提交][状态][讨论版] 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写 ...
- 28、Django实战第28天:个人信息展示
从今天开始,我来完成个人中心部分,前端页面如下 1.浏览这些页面可以发现,它们和base.html是有区别的,因此,它们需要新建一个模板usercenter-base.html 2.把usercent ...
- ubuntu 下终端关于调试C++的命令
先确定安装了vim 和gcc (c语言)或者g++(c++) 如果没有安装可以在终端输入以下命令: sudo apt-get install build-essential sudo apt-get ...
- 【平面图】【最小割】【最短路】【Heap-Dijkstra】bzoj1001 [BeiJing2006]狼抓兔子
http://wenku.baidu.com/view/8f1fde586edb6f1aff001f7d.html #include<cstdio> #include<queue&g ...
- Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析
Scala函数式编程 ----------------------------------------------------------------------------------------- ...