本文来源:https://www.cnblogs.com/dyfblog/p/5880728.html

对字符串操作

1、应用:

当我们爬取的东西在js文件中,比如我爬今日头条美女的图片时,它的图片url,就在js中。

当我们处理普通的txt文本时。比如读取log日志

创建一个匹配Email的正则表达式

用该正则表达式去匹配用户的输入来判断是否合法

2、常用的正则

中文    [\u4e00-\u9fa5]

url        ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

匹配首尾空白字符的正则表达式   ^\s*|\s*$

匹配空白行的正则表达式   \n\s*\r

3.元字符

.                    匹配任意字符(不包括换行符)包含空白符

^                    匹配开始位置,多行模式下匹配每一行的开始

$                    匹配结束位置,多行模式下匹配每一行的结束

*                    匹配前一个元字符0到多次

+                    匹配前一个元字符1到多次

?                    匹配前一个元字符0到1次

{n}                  匹配前面元字符n次

{m,n}                匹配前一个元字符m到n次

\d                   匹配一个数字, 相当于 [0-9]

\D                   匹配非数字,相当于 [^0-9]

\s                   匹配任意空白字符, 相当于 [ \t\n\r\f\v]

\S                   匹配非空白字符,相当于 [^ \t\n\r\f\v]

\w                   匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]

\W                   匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]

\\                   转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符

[]                   字符集,一个字符的集合,可匹配其中任意一个字符

|                    逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b

(...)                分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值

\A                   匹配字符串开始位置,忽略多行模式

\Z                   匹配字符串结束位置,忽略多行模式,就是如果最后换行了,他会匹配换行前的字符。

\b                   匹配位于单词开始或结束位置的空字符串

\B                   匹配不位于单词开始或结束位置的空字符串

\n                   匹配一个换行符

\t                    匹配一个制表符

(?:...)              分组的不捕获模式,计算索引时会跳过这个分组

(?P<name>...)        分组的命名模式,取此分组中的内容时可以使用索引也可以使用name

(?P=name)            分组的引用模式,可在同一个正则表达式用引用前面命名过的正则,和下面这个一起用

(?(id/name)yes|no)   若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则

4、模式

re.S    DOTALL,此模式下 '.' 的匹配不受限制,可匹配任何字符,包括换行符

re.I     IGNORECASE, 忽略大小写的匹配模式

re.M    MULTILINE,多行模式, 改变 ^ 和 $ 的行为

re.X    VERBOSE,冗余模式, 此模式忽略正则表达式中的空白和#号的注释,例如写一个匹配邮箱的正则表达式

正则表达式的模式是可以同时使用多个的,在 python 里面使用按位或运算符 | 同时添加多个模式

如 re.compile('', re.I|re.M|re.S)

5.内置对象

SRE_Pattern    这个对象是一个编译后的正则表达式,编译后不仅能够复用和提升效率,同时也能够获得一些其他的关于正则表达式的信息

属性:

  • flags         编译时指定的模式
  • groupindex    以正则表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在内。
  • groups        正则表达式中分组的数量
  • pattern       编译时用的正则表达式

SRE_Match    这个对象会保存本次匹配的结果,包含很多关于匹配过程以及匹配结果的信息

属性:

  • endpos       本次搜索结束位置索引
  • lastgroup    本次搜索匹配到的最后一个分组的别名
  • lastindex    本次搜索匹配到的最后一个分组的索引
  • pos          本次搜索开始位置索引
  • re           本次搜索使用的 SRE_Pattern 对象
  • regs         列表,元素为元组,包含本次搜索匹配到的所有分组的起止位置
  • string       本次搜索操作的字符串

group([group1, ...])         根据提供的索引或名字返回响应分组的内容,默认返回 start() 到 end() 之间的字符串, 提供多个参数将返回一个元组

groupdict([default=None])    返回 返回一个包含所有匹配到的命名分组的字典,没有命名的分组不包含在内,key 为组名, value 为匹配到的内容,参数 default 为没有参与本次匹配的命名分组提供默认值

groups([default=None])       以元组形式返回每一个分组匹配到的字符串,包括没有参与匹配的分组,其值为 default

6、常用

.*会尽量匹配的多,直到匹配不到为止

.*?就是说非贪婪,只要能不匹配,他就不匹配。

加了re.S,.就可以匹配任意包括换行

7、函数

re.compile(pattern, flags=0)   :预编译,复用,regex

给定一个正则表达式 pattern,指定使用的模式 flags 默认为0 即不使用任何模式,(也可以加上re.S等模式)然后会返回一个 SRE_Pattern  regex = re.compile(".+"),

这个对象可以调用其他函数来完成匹配,一般来说推荐使用 compile 函数预编译出一个正则模式之后再去使用,这样在后面的代码中可以很方便的复用它,当然大部分函数也可以不用 compile 直接使用。

re.findall(pattern, string, flags=0),也可以用regex.findall()调用

参数 pattern 为正则表达式, string 为待操作字符串, flags 为所用模式,函数作用为在待操作字符串中寻找所有匹配正则表达式的字串,返回一个列表,如果没有匹配到任何子串,返回一个空列表。

re.match()和re.search(),也可以regex.match调用,尽量用search

match(pattern, string, flags=0)   ,从字符串开始处开始,寻找可以匹配上模式的子串, 返回匹配上的第一个字串,并且不再继续找,如果开始处不匹配,则不再继续寻找,找不到时返回 None。match(pattern, string, flags=0)   返回值为 一个 SRE_Match 对象。

search(pattern, string, flags=0)   函数类似于 match,不同之处在于不限制正则表达式的开始匹配位置,返回值为 一个 SRE_Match 对象。

8.分组

捕获分组和不捕获分组:差别就是,是否缓存

下面的例子来自知乎:要在一篇文章中查找"program"和"project"两个单词,正则表达式可表示为/program|project/,也可表示为/pro(gram|ject)/,但是缓存子匹配(gramject)没有意义,就可以用/pro(?:gram|ject)/进行非捕获性匹配这样既可以简洁匹配又可不缓存无实际意义的字匹配。 作者:冰冻三寸

 

正则re模块--入门的更多相关文章

  1. Nginx开发HTTP模块入门

    Nginx开发HTTP模块入门 我们以一个最简单的Hello World模块为例,学习Nginx的模块编写.假设我们的模块在nginx配置文件中的指令名称为hello_world,那我们就可以在ngi ...

  2. Python模块(三)(正则,re,模块与包)

    1. 正则表达式 匹配字符串 元字符 .   除了换行 \w  数字, 字母, 下划线 \d  数字 \s  空白符 \n 换行符 \t  制表符 \b  单词的边界 \W  \D \S 非xxx [ ...

  3. Request模块入门学习

    使用指令npm install --save request来安装模块,然后使用var request = require('request')完成引用. 对于GET请求,主要是获取目的url中数据. ...

  4. 日志(logging)与正则(re)模块

    logging模块 #日志:日常的流水 =>日志文件,将程序运行过程中的状态或数据进行记录,一般都是记录到日志文件中 #1.logging模块一共分为五个打印级别 debug.info.warn ...

  5. python正则--re模块常用方法

    前面几篇关于正则匹配的文章我用的方法都只有一个re.search 但其实正则re模块提供很多非常好用的方法,我们先来看看re模块都有那些属性方法呢 前面的一堆带_或者大写的就不关注了,主要关注最后面的 ...

  6. 正则 re模块

    Python 正则表达式 re 模块 简介 正则表达式(regular expression)是可以匹配文本片段的模式.最简单的正则表达式就是普通字符串,可以匹配其自身.比如,正则表达式 ‘hello ...

  7. python的正则re模块

    一. python的正则 python的正则模块re,是其内置模块,可以直接导入,即import re.python的正则和其他应用的正则及其相似,有其他基础的话,学起来还是比较简单的. 二. 正则前 ...

  8. python正则re模块

    今日内容: 知识点一:正则 什么是正则:  就是用一系列具有特殊含义的字符组成一套规则,改规则用来描述具有某一特征的字符串  正则就是用来在一个大的字符串中取出符合规则的小字符串   为什么用正则:  ...

  9. argparse模块入门介绍——基于python3.7

    转载:https://blog.csdn.net/weixin_41796207/article/details/80846406 首先说明,本人是想要学习如何使用argparse模块,打造命令行程序 ...

随机推荐

  1. 实体类 @TableName&@TableField&@Version

    //指向表table_biao @TableName("table_biao)public class UserThirdLogin extends Model<UserThirdLo ...

  2. 【poj1182】食物链--并查集扩展域

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 109341   Accepted: 33191 Description 动物 ...

  3. Love to be loved by you & Just one last dance

    http://baike.baidu.com/link?url=wOnBuPncIH5b5oWc0ZREXCU8x6XPYqlZazTLarTjE8eOpdtpv57YMeB_kgXQq4BcCeh2 ...

  4. SecureCRT的安装与破解,详细过程

    使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方法,仅供大家参考学习: 1.首先在本站下载SecureCRT 7.3.6最新 ...

  5. CodeForces 755D PolandBall and Polygon ——(xjbg)

    每次连线,起点和终点之间,每一个被点亮的点,这些点都能连出去两条线,因此可以增加的块数+2(1这个点除外,因为只有连出的点没有连进的点),计算起点和终点之间有几个点被点亮即可,然后1这个点特判一下.感 ...

  6. MySql数据类型及对应存储空间

    整数型数据类型 类型名称 说明 存储需求 TINYINT 很小的正数 1个字节 SMALLINT 小正数 2个字节 MEDIUMINT 中等大小的正数 3个字节 INT(INTEGER) 普通大小的正 ...

  7. phpinfo中敏感信息记录

    比赛中或者渗透中如果遇到phpinfo,从里面发现的一些线索能够对后续的渗透和解题帮助很大,这里记录总结一下目前网上比较常用的的. 下图来源于:https://seaii-blog.com/index ...

  8. SpringCloud(2)----SpringCloud理解篇

    一.微服务概述 1.什么是微服务 目前的微服务并没有一个统一的标准,一般是以业务来划分将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事. 与微服务相对的叫巨石 ...

  9. Fragment 和Activity的数据传递实例代码

    package com.example.fragment; import android.os.Bundle; import android.support.v4.app.FragmentActivi ...

  10. URL编码和解码

    1. 为什么需要编码 当数据不利于处理.存储的时候,就需要对它们进行编码.如对字符进行编码是因为自然语言中的字符不利于计算机处理和存储.对图片信息.视频信息.声音信息进行压缩.优化,将其“格式化”,是 ...