正则表达式对比工具

https://pan.baidu.com/s/1XIPyF1vFSj5PACPx9zW8_g

(一)      正则表达式符号和特殊字符

符号

说明

示例

|

re1|re2,匹配re1或re2

.

匹配任何字符(\n除外)

^

匹配字符串开始部分

^ab.*

以ab开始的字符串,匹配ab123、ababc等等

$

匹配字符串结束部分

.*123$

以123结束的字符串,匹配ab123、测试123等等

*

匹配0次或多次前面的正则表达式

.*

匹配0次或多次前面的 .

+

匹配1次或多次前面的正则表达式

?

匹配0次或1次前面的正则表达式

{n}

匹配n次前面的正则表达式

.{5}

{m,n}

匹配M到N次前面的正则表达式

.{1,10}

[…]

匹配[]里的任一字符

[abc]d

匹配 ad、bd、cd

[x-y]

匹配范围内的任一字符

[a-c]d:匹配 ad、bd、cd

[0-9]d:匹配0d、1d、2d、3d等

[^…]

不匹配[]里的任一字符

[^a-c]d: 不匹配 ad、bd、cd

(…)

将正则表达式封闭为一个组

例如:[a-b][a-b] :只匹配aa、ab等

([a-b][a-b])+:匹配aaaa、abab等.另外可以用这个()来提取数据

 

符号

说明

示例

\d

匹配任一数字,和[0-9]是一样的,\D则不匹配任何数字

A\d: 匹配A1、A2等

\w

匹配任一数字、字母,和[A-Za-z0-9]是一样的,\W则相反

\s

匹配任一空格字符,\S

则相反

hello\sword:匹配hello word

\..

将\后一个字符按字面意义匹配,不匹配特殊含义

\?:匹配?

\\d:匹配\d

\b

匹配任何单词边界(\B

则相反)

例如:字符串 ab the Htherr

the: 能匹配到2个 the

\bthe\b:只匹配第一个 the

\Bthe\B:只匹配第二个 the

\A

匹配字符串开始部分,\Z 则字符串结束部分

参照^ 和$

 

(二)      贪婪模式和非贪婪模式

贪婪模式:尽可能的匹配

非贪婪模式:匹配到第一个结果后就结束匹配。在*、+、?、{}后面加一个?就是非贪婪模式。(*|+|?|{})?

看下面2张图就清楚了(蓝色背景表示匹配的内容)

第一张图(贪婪模式):匹配到第一</div>后还会继续向右匹配。(在内容和正则表达式匹配的情况下,尽可能的匹配最长字符串)

第二张图(非贪婪模式):匹配到第一个</div>后就结束匹配了。(在内容和正则表达式匹配的情况下,匹配到第一个结果后就结束匹配)

 

(三)      re模块

函数/方法

说明

re.compile(pattern, flags=0)

(预编译)将正则表达式编译为对象(不是必须的,不过一般是会预编译)

实际应用中:下面2种方式都是可以用的

the_str=''

第一:
href_regx=
re.compile('<div.*</div>')
href_regx.match(the_str)

第二:
re.match('<div.*</div>',the_str)

第一种是调用正则表达式对象的match()方法。

第二种写法是调用re模块的match()函数

match(pattern, string)

Pattern:正则表达式

String:字符串

匹配成功,返回字符串,失败则返回None。

预编译后的正则表达式对象则只需要传str就行了(因为它本身就是pattern对象

search(pattern, string)

Pattern:正则表达式

String:字符串

返回第一个匹配内容,没有匹配则返回None

findall(pattern, string)

 

以列表形式返回所有匹配的内容

finditer(pattern, string)

返回所有匹配的内容,以迭代器的形式

split(pattern, string)

Pattern匹配的内容作为分隔符,split将字符串分割为列表并返回

 

flags参数

说明

re.I  
re.IGNORECASE

不区分大小写

re.M

re.MULTILINE

匹配行的开始和结束部分,而不是严格匹配字符串本身的开始、结束部分

re.S

re.DOTALL)

 

. (点号)可以匹配\n

使用flags参数的时候,不清楚传第几个参数的话,最好先去看下方法(函数)的实现代码。或者直接指定(flags= xxx)

(四)      re模块示例

 import re
the_str='<div id="hd_info"></div></div></div>'
href_regx= re.compile('<div.*</div>')
print('match()示例:',href_regx.match(the_str))
print('match()示例:',re.match('<div.*</div>',the_str))
print('search()示例:',re.search('/div>',the_str)) print('findall()示例:',re.findall('/div>',the_str))
print('finditer()示例:',re.finditer('/div>',the_str))
for i in re.finditer('/div>',the_str):
print('迭代finditer()返回值:',i) print('split()示例:',re.split('/.',the_str,re.DOTALL))

(五)      正则表达式实际应用

 匹配电信手机号

133、149、153、173、177、180、181、189、199开头的11位数字

正则表达式:1(39|49|53|[7][37]|[8][019]|99)[0-9]{8}

匹配a标签开始 href属性值 (<a href='' )

Python笔记(十):正则表达式的更多相关文章

  1. Python:笔记(6)——正则表达式

    Python:笔记(6)——正则表达式 re模块 re模块用于在字符串中执行基于正则表达式模式的匹配和替换. 使用原始字符串 正则表达式使用 \ 对特殊字符进行转义,比如,为了匹配字符串 ‘pytho ...

  2. python笔记十(列表生成式、字典生成式、生成器、生成器的并行)

    一.列表生成式 列表生成式就是python设置的可以用来可以生成列表的. 如要生成一个0-9的列表我们可以通过以下代码实现: >>> list(range(10)) [0, 1, 2 ...

  3. guxh的python笔记十:包和模块

    1,包和模块 包package:本质就是一个文件夹/目录,必须带一个__init.__.py的文件 模块module:.py结尾的python文件 2,导入方法 import pandas, coll ...

  4. Python笔记(十八)_私有属性、实例属性、类属性

    私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...

  5. Python笔记(十五)_异常处理

    try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...

  6. Python笔记(十四)_永久存储pickle

    pickle模块:将所有的Python对象转换成二进制文件存放 应用场景:编程时最好将大对象(列表.字典.集合等)用pickle写成永久数据包供程序调用,而不是直接写入程序 写入过程:将list转换为 ...

  7. python笔记十五(面向对象及其特性)

    一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...

  8. python笔记十四(高阶函数——map/reduce、filter、sorted)

    一.map/reduce 1.map() map(f,iterable),将一个iterable对象一次作用于函数f,并返回一个迭代器. >>> def f(x): #定义一个函数 ...

  9. python笔记十二(匿名函数)

    一.匿名函数 有些情况下,我们需要把函数当做参数传入到另外的函数中,或者是把函数作为某个函数的返回值,此时我们就可以使用匿名函数. 匿名函数的标志是lambda.   >>> f = ...

  10. Python笔记(十九)_继承

    继承 继承可以把父类的所有功能都直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写 多重继承 通过多重继承,一个子类就可以同时获得多个父类的所有功能 > ...

随机推荐

  1. 全网最详细的HA集群的主节点之间的双active,双standby,active和standby之间切换的解决办法(图文详解)

    不多说,直接上干货! 1. HA集群的主节点之间的双standby的解决办法: 全网最详细的Hadoop HA集群启动后,两个namenode都是standby的解决办法(图文详解) 2. HA集群的 ...

  2. JAVA微信服务号开发简记

    现在微信公众平台的开发已经越来越普遍,这次开发需要用到微信公众平台.所以这边做一个简单的记录,也算是给那些没踩过坑的童鞋一些启示吧.我将分几块来简单的描述一下,之后会做详细的说明. 基本认证信息说明 ...

  3. maven-compiler-plugin 指定jdk的版本和编码

    为了让maven的jdk编译版本一致, 使用maven-compiler-plugin插件来协助管理 建议新建maven项目后的第一步就是配置该插件 <build> <plugins ...

  4. curl常用命令【转】

    原文地址: http://www.thegeekstuff.com/2012/04/curl-examples/ 下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://w ...

  5. dhcp服务器(一)

    DHCP服务概述: 名称:DHCP -Dynamic Host Configuration Protocol动态主机配置协议. 功能:DHCP(Dynamic Host Configuration P ...

  6. AR介绍

    AR介绍 AR全名扩增实境,是一种实时融合现实与虚拟的图像技术. AR技术的三板斧:感知(寻找目标定位位置-与环境交互),渲染(实现产品交互-与客户交互),追踪(捕捉目标运动轨迹-客户环境上下文). ...

  7. Linux-(watch,at,crontab)

    watch命令 1.命令格式: watch  [参数]  [命令] 2.命令功能: 可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令. watch可以帮你监测一个命令的运行结 ...

  8. 查看Linux 版本

     如何得知自己正在使用的linux是什么版本呢,下面的几种方法将给你带来答案! 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux v ...

  9. Java RMI 框架(远程方法调用)

    转自:http://haolloyin.blog.51cto.com/1177454/332426 RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类exte ...

  10. C#基础知识回顾--C#遍历enum类型、获取enum项个数

    C#遍历enum类型 对于enum类型: 使用foreach遍历enum类型的元素并填充combox foreach ( HatchStyle hs1 in Enum.GetValues(typeof ...