如果直接给出字符,就是精确匹配。对于特殊字符- ,在正则表达式中要用转义字符\转义。
 
\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. spring boot 使用@ConfigurationProperties

    有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配 ...

  2. 如何将一个Winform嵌入到一个Control当中

    /// <summary> /// 将一个winform窗体嵌入control中 /// </summary> /// <param name="f" ...

  3. hdoj-2028-Lowest common multiple plus

    题目:Lowest common multiple plus 代码: #include<stdio.h> int common(int a,int b)//计算最大公约数 { int c= ...

  4. 【Coursera】Technology :Fifth Week(2)

    The Ethernet Story Bob Metcalfe Bob 参与了 Xerox 研究项目,着手解决建造一个处处连接个人计算机的架构.当时,他们刚刚完成了 Internet 的开端 -具有 ...

  5. 为什么我的电脑win系统没有便笺功能?为什么我在开始菜单里找不到便笺功能?

    有些网友表示,为什么我的电脑没有便笺功能?为什么我在开始菜单里找不到便笺功能? 从问题可以基本判断出来,这些网友使用的Win7版本有可能是买笔记本或者台式电脑时预装的Win7家庭普通版或者Win7精简 ...

  6. Jenkins+Ant/maven+Svn实现自动化部署,编译,运行,测试结果自动邮件通知

    Jenkins+Ant+Svn实现自动化部署,编译,运行,测试结果自动邮件通知

  7. Cocos2d-x学习笔记(九)场景切换

    这里只介绍两个简单的两个场景相互切换的方法. void pushScene(Scene *sn)和void popScene(Scene *sn)是一对.前者将当前场景放入到场景堆栈中,并切换到下一个 ...

  8. OpenVPN Windows 平台安装部署教程

    一.环境准备: 操作系统Windows 服务器IP:192.168.88.123  VPN:192.168.89.1 客户端IP:192.168.78.3 客户端服务端单网卡,路由器做好端口映射 安装 ...

  9. python 线性查找

    import random val= data=[,,,,] : find= val=int(input('请输入查找键值(1-9),输入-1离开:')) for i in data: if i==v ...

  10. S4 对象系统

    上一节中,我们介绍了 S3 系统.与大多数其他编程语言的面向对象系统不同,与那些类被定义为固定结构,且随着程序编译有确定的方法分派的系统相比,S3 系统显得非常不严谨.当我们定义一个 S3 类时,几乎 ...