如果直接给出字符,就是精确匹配。对于特殊字符- ,在正则表达式中要用转义字符\转义。
 
\d        一个数字,
\w       任意单个字符,空白符除外(例 字母、数字或下划线 . 英文点号)
\s       一个空格(也包括Tab等空白符)
 
大写的为小写的取反模式
 
\D           除0到9的数字以外的任何字符 
\W          匹配除数字、字母和下划线以外的任何字符
\S           匹配除空格、制表符和换行符以外的任何字符
 
变长字符:表示匹配字符的次数  
*            表示0个或多个字符  
+           表示至少一个字符,
?          表示0个或1个字符,
{n}         表示n个字符
{n,m}     表示n-m个字符,包含n,m个
 
\d{3}\s+\d{3,8} 表示匹配3个数字和一个或多个空格和3-8个数字
 
中括号[]可以自定义匹配范围,表示可以是里面的任意一个
[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个数字、字母或下划线组成的字符串,也就是Python合法的变量。
 
点-星(.*)将匹配除除换行符外的所有字符
 
A|B可以匹配A或B,所以 (P|p)ython 可以匹配Python 或 python .
 
^表示行的开头,^\d 表示必须以数字开头。 $表示行的结束,\d$表示必须以数字结束。
 
在字符串前加上r,表示对立面的字符不转义。
 
match
是根据匹配模式从给定字符串的第一个字符开始匹配,如果匹配成功,返回一个match对象,否则返回None
import re 
a=re.match(r'^(\d{3})\-(\d{3,8})$','010-12345') 
a.group()                 #'010-12345'
a.group(1)               #'010'
a.group(2)               #'12345'
group(0)永远是原始字符串,group(1)、group(2)……表示第1/2、……个子串
 
注 :如果第一个字符就不符合,则返回None,match只返回符合的第一个对象,不再查找余下的
经Python3.5测试,只有res2有匹配到值,res1,res3都返回None。
>>> pattern=re.compile(r'hello')
>>> res1=re.match(pattern,'hell')
>>> res2=re.match(pattern,'hellow')
>>> res3=re.match(pattern,'ashello')
>>> res1     None
>>> res2
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> res3     None
'''
 
findall     返回查找全部结果的列表
mo1=re.compile(r'''(\d{3}\w{2}([.A-F]{2,4})[%@F-Z]{3})''',re.VERBOSE)
A = mo1.findall('576dfCD.HIS794SDABC@KM')

>>> A
[('576dfCD.HIS', 'CD.'), ('794SDABC@KM', 'ABC')]

贪婪匹配
 
默认是贪婪匹配, 在括号内加?表示非贪婪匹配  :
贪婪匹配
re.match(r'^(\d+)(0*)$','102300').groups()
#('102300', '')
非贪婪匹配
re.match(r'^(\d+?)(0*)$','1022300').groups()
#('10223', '00')
 
re.compile()的第二个参数
 
re.DOTALL     让句点字符匹配所有字符,包括换行符。
noNewlineRegex=re.compile('.*')
m='Serve the public trust.\nProtect the innocent.\nUphold the law.'
n=noNewlineRegex.search(m).group()
print(n)
#'Serve the public trust.'
newlineRegex=re.compile('.*',re.DOTALL)
print(newlineRegex.search(m).group())
'''
Serve the public trust.
Protect the innocent.
Uphold the law.
'''
 
re.IGNORECASE或re.I       不区分大小写的匹配
robocop=re.compile(r'robocop',re.I)
robocop.search('Robocop is part man,part machine,all cop.').group()
#'Robocop'
 
re.VERBOSE        忽略正则表达式字符串中的空白符和注释
phoneRegex=re.compile(r'''(
(\d{3}|\(\d{3}\))?   #area code
(\s|-|\.)?           #separator
\d{3}                #first 3 digits
(\s|-|\.)            #separator
\d{4}                #last 4 digits
(\s*(ext|x|ext.)s*\d{2,5})?    #extension
)''',re.VERBOSE)
 
组合使用re.IGNORECASE ,re.DOTALL和re.VERBOSE 
#如果希望正则表达式不区分大小写,并且句点字符匹配换行,就可以这样构造re.compile()调用:
someRegexValue=re.compile('foo',re.IGNORECASE|re.DOTALL)
#使用第二个参数的全部3个选项:
someRegexValue=re.compile('foo',re.IGNORECASE|re.DOTALL|re.VERBOSE)
 
 
re.split()
切分字符串
 
>>> 'a b    c'.split(' ')
['a', 'b', '', '', '', 'c']
 
固定字符切分字符串,无法识别连续的空格
 
>>> re.split(r'\s+','a b   c')
['a', 'b', 'c']
>>> re.split(r'[\s\,\;]+','a,b ;c d')
['a', 'b', 'c', 'd']
 
sub()      替换字符串
 
Regex对象的sub()方法,第一个参数  用于替换 源字符串的 需被 替换 的字符  ,第二个参数是 源字符串
 
mol=re.compile(r'Agent \w+')
mol.sub('CENSORED','Agent Alice gave the secret documents to Agent Bob.')
#'CENSORED gave the secret documents to CENSORED.'
 
保留被替换字符串 中 的一部分内容,在sub()的第一个参数中,可以输入\1、\2、\3.....表示将re 的表达式模式中 的 分组1 ,分组2 ,分组3 的部分显示出来(即不被替换)
假定想要隐去密探的姓名,只显示他们姓名的第一个字母。要做到这一点,可以使用正则表达式Agent(\w)\w*,传入r'\1****'作为sub()的第一个参数。
 
#字符串中的\1将由分组1匹配的文本所替代,也就是正则表达式的(\w)分组。
agentNamesRegex=re.compile(r'Agent (\w)\w*')
agentNamesRegex.sub(r'\1****','Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.')
#'A**** told C**** that E**** knew B**** was a double agent.'
 
 
#编译
#当我们在python 中使用正则表达式时,re模块内部会干两件事:
#1.编译正则表达式,如果正则表达式的字符串本身不合法,会报错
#2.用编译后的正则表达式去匹配字符串。
#如果一个正则表达式要重复使用几千次,出于效率考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配
 

re 正则的更多相关文章

  1. Javascript正则对象方法与字符串正则方法总结

    正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...

  2. C#-正则,常用几种数据解析-端午快乐

    在等待几个小时就是端午节了,这里预祝各位节日快乐. 这里分享的是几个在C#中常用的正则解析数据写法,其实就是Regex类,至于正则的匹配格式,请仔细阅读正则的api文档,此处不具体说明,谢谢. 开始吧 ...

  3. Javascript 中 with 的替代方案和String 中的正则方法

    这几天在升级自己的MVVM 框架,遇到很多小问题,就在这里统一解决了. with 语法 在代码中,要执行这么一个函数 function computeExpression(exp, scope) { ...

  4. JavaScript与PHP中正则

    一.JavaScript 有个在线调试正则的工具,点击查看工具.下面的所有示例代码,都可以在codepen上查看到. 1.创建正则表达式 var re = /ab+c/; //方式一 正则表达式字面量 ...

  5. Java正则速成秘籍(一)之招式篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  6. Java正则速成秘籍(二)之心法篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  7. Java正则速成秘籍(三)之见招拆招篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  8. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...

  9. [Python基础知识]正则

    import re str4 = r"^http://qy.chinahr.com/cvm/preview\?cvid=\w{24,25}&from=sou&gtid=\w{ ...

  10. iOS中使用正则

    一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

随机推荐

  1. cygwin下使用apt-cyg安装新软件

    1.获取  (记得先安装好git) git clone https://github.com/transcode-open/apt-cyg.git 2.安装apt-cyg cd apt-cyg chm ...

  2. 【自动化】基于Spark streaming的SQL服务实时自动化运维

    设计背景 spark thriftserver目前线上有10个实例,以往通过监控端口存活的方式很不准确,当出故障时进程不退出情况很多,而手动去查看日志再重启处理服务这个过程很低效,故设计利用Spark ...

  3. 【第九章】 springboot + mybatis + 多数据源 (AOP实现)

    在第八章 springboot + mybatis + 多数据源代码的基础上,做两点修改 1.ShopDao package com.xxx.firstboot.dao; import org.spr ...

  4. 51nod 1413 权势二进制

    本来刚开始还是想用每一位 -1的个数 然后再乘以10  不断累加 后来发现 完全不是这回事啊  因为本身就是0 和 1 所以只要记录出现的最大的数字 就是答案  因为 n >= 1 // 所以不 ...

  5. UVA 11806 Cheerleaders (容斥原理

    1.题意描述 本题大致意思是讲:给定一个广场,把它分为M行N列的正方形小框.现在给定有K个拉拉队员,每一个拉拉队员需要站在小框内进行表演.但是表演过程中有如下要求: (1)每一个小框只能站立一个拉拉队 ...

  6. 对Tomcat启动或运行时,项目对jar包依赖路径的一些粗浅认知

    Tomcat在运行webapp项目的时候,需要各种依赖jar包.它会从2个地方去找这些包 1.Tomcat自己的lib目录中 2.webapp目录下,webapps\{项目}\WEB-INF\lib ...

  7. python 集合元素添加

    #A new empty set color_set = set() color_set.add("Red") print(color_set) #Add multiple ite ...

  8. shell 输出双引号

    #!/bin/sh your_name='runoob' str="Hello, I know you are \"$your_name\"! \n" echo ...

  9. Thunder团队Final版爱阅app发布视频

    视频链接:https://www.bilibili.com/video/av17008792/ 视频简介:首先出现的是我们团队的logo,接着是Final版爱阅app的功能展示,紧接着是我们团队的开发 ...

  10. 【Golang 接口自动化01】使用标准库net/http发送Get请求

    发送Get请求 使用Golang发送get请求很容易,我们还是使用http://httpbin.org作为服务端来进行演示. package main import ( "bytes&quo ...