原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成。

原子分类

1.普通字符作为原子

普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符、所有数字等。例如,a——z、A——Z、0——9。

#-*- codingn:utf-8 -*-

import re

pattern = 'lo'

String = "I love you"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String) print("普通字符作为原子的结果:%s"%Result)

运行结果

2.一些特殊字符和元字符作为原子

任何一个符号都可以作为原子使用,但如果这个符号在正则表达式中有一些特殊意义,我们就必须使用转义字符“\”取消它的特殊意义,将其变成一个普通的原子。例如,所有标点符号以及一些其他符号,双引号“””、单引号“’”、“*”、“+”、“.”等,如果当原子就必须像\”、\’、\+和\.这样使用。

#-*- codingn:utf-8 -*-

import re
#需要转义
pattern = '\+' String = "a+b=c"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String) print("特殊字符作为原子的结果:%s"%Result)

运行结果

3.一些非打印字符作为原子

所谓的非打印字符,是一些在字符串中的格式控制符号,例如:\n回车及\t制表符号等。例如下表所示列出了正则表达式中常用的非打印字符及其含义。

#-*- codingn:utf-8 -*-

import re

pattern = '\n'

String = """zhang
san"""
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String) print("非打印字符作为原子的结果:%s"%Result)

4.使用“通用字符类型”作为原子

前面介绍的不管是打印字符还是非打印字符作为原子,都是一个原子只能匹配一个字符。而有时我们需要一个原子可以匹配一类字符,例如,匹配所有数字不是一个数字,匹配所有字母而不是一个字母,这时就要使用“通用字符类型”了。

字母 意义
/w 匹配任意一个字母、数字或者下划线
/W 匹配除字母、数字和下划线意外的任意一个字符
/d 匹配仍以一个十进制数
/D 匹配除十进制数意外的任意一个其他字符
/S 匹配除空白字符意外的任意一个其他字符
/s 匹配任意一个空白字符
#-*- codingn:utf-8 -*-

import re

pattern ='\who\w'

String = "wo shi who23"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String) print("通配符作为原子的结果:%s"%Result)

运行结果:

5.原子表

代表某一类的原子太多了,系统不能全都给提供出来,例如数字中的奇数(1、3、5、7、9、)、字母中的元音字母(a、e、i、o、u)等。所以就需要我们可以自己定义出特定的“类原子”,使用原子表“[]”就可以定义一组彼此地位平等的原子,且从原子表中仅选择一个原子进行匹配

在Python中,原子表由[]表示,比如[xyz],就是一个原子表,这个原子表中定义了3个原子,这3个原子的地位平等。

#-*- codingn:utf-8 -*-

import re

pattern1 ='\wf[gj]\w'
pattern2 ='\wf[^gj]\w'
pattern3 ='\wf[gj]\W' String = "abcdefgjikdlfk"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result1 = re.search(pattern1,String)
Result2 = re.search(pattern2,String)
Result3 = re.search(pattern3,String) print("pattern1:%s"%Result1)
print("pattern2:%s"%Result2)
print("pattern3:%s"%Result3)

运行结果:

【Python3 爬虫】07_正则表达式(原子)的更多相关文章

  1. 笔趣看小说Python3爬虫抓取

    笔趣看小说Python3爬虫抓取 获取HTML信息 解析HTML信息 整合代码 获取HTML信息 # -*- coding:UTF-8 -*- import requests if __name__ ...

  2. Python3爬虫系列:理论+实验+爬取妹子图实战

    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...

  3. python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题

    当用python3做爬虫的时候,一些网站为了防爬虫会设置一些检查机制,这时我们就需要添加请求头,伪装成浏览器正常访问. header的内容在浏览器的开发者工具中便可看到,将这些信息添加到我们的爬虫代码 ...

  4. python 3.x 爬虫基础---正则表达式

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

  5. Python3 爬虫之 Scrapy 核心功能实现(二)

    博客地址:http://www.moonxy.com 基于 Python 3.6.2 的 Scrapy 爬虫框架使用,Scrapy 的搭建过程请参照本人的另一篇博客:Python3 爬虫之 Scrap ...

  6. Python3 爬虫之 Scrapy 框架安装配置(一)

    博客地址:http://www.moonxy.com 基于 Python 3.6.2 的 Scrapy 爬虫框架使用,Scrapy 的爬虫实现过程请参照本人的另一篇博客:Python3 爬虫之 Scr ...

  7. python3爬虫--反爬虫应对机制

    python3爬虫--反爬虫应对机制 内容来源于: Python3网络爬虫开发实战: 网络爬虫教程(python2): 前言: 反爬虫更多是一种攻防战,针对网站的反爬虫处理来采取对应的应对机制,一般需 ...

  8. python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用

    站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...

  9. 玩转python爬虫之正则表达式

    玩转python爬虫之正则表达式 这篇文章主要介绍了python爬虫的正则表达式,正则表达式在Python爬虫是必不可少的神兵利器,本文整理了Python中的正则表达式的相关内容,感兴趣的小伙伴们可以 ...

  10. python3爬虫(4)各种网站视频下载方法

    python3爬虫(4)各种网站视频下载方法原创H-KING 最后发布于2019-01-09 11:06:23 阅读数 13608 收藏展开理论上来讲只要是网上(浏览器)能看到图片,音频,视频,都能够 ...

随机推荐

  1. C# 日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别(转)

    日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别http://www.cnblogs.com/jhxk/articles/ ...

  2. 如何正确学习web前端流程以及如何找工作

    解释一下web前端工作是做啥的,Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/Flash等各种Web技术进行客户端产品的开发.完成客户端程序(也就是浏览器端)的开发 ...

  3. HDU 1043 Eight 【经典八数码输出路径/BFS/A*/康托展开】

    本题有写法好几个写法,但主要思路是BFS: No.1 采用双向宽搜,分别从起始态和结束态进行宽搜,暴力判重.如果只进行单向会超时. No.2 采用hash进行判重,宽搜采用单向就可以AC. No.3 ...

  4. 遇见requestAnimationFrame

    今天,在读javascript异步编程的js事件深入理解部分的时候,了解到了requestAnimationFrame 这个api,在这里记录一下. 原文: setTimeout 和 setInter ...

  5. LCA+差分【p4427】[BJOI2018]求和

    Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的\(k\) 次方和,而且每次的\(k\) 可能是不同的.此处节点深度的 ...

  6. P1162 填涂颜色 洛谷

    题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...

  7. HDUOJ题目HTML的爬取

    HDUOJ题目HTML的爬取 封装好的exe/app的GitHub地址:https://github.com/Rhythmicc/HDUHTML 按照系统选择即可. 其实没什么难度,先爬下来一个题目的 ...

  8. CodeForces - 981D Bookshelves

    Discription Mr Keks is a typical white-collar in Byteland. He has a bookshelf in his office with som ...

  9. 【树链剖分】【函数式权值分块】bzoj1146 [CTSC2008]网络管理Network

    裸题,直接上.复杂度O(n*sqrt(n)*log(n)). //Num[i]表示树中的点i在函数式权值分块中对应的点 //Map[i]表示函数式权值分块中的点i在树中对应的点 #include< ...

  10. 【分块】bzoj1798 [Ahoi2009]Seq 维护序列seq

    分块,打标记,维护两个标记:乘的 和 加的. 每次 区间乘的时候,对 乘标记 和 加标记 都 乘上那个值. 每次 区间加的时候 对 加标记 加上那个值. (ax+b)*v=axv+bv.开 long ...