如果直接给出字符,就是精确匹配。对于特殊字符- ,在正则表达式中要用转义字符\转义。
 
\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. Leetcode ——Lowest Common Ancestor of a Binary Tree

    Question Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. ...

  2. css未知大小的图片居中

    未知大小的图片在指定大小的div盒子中垂直水平居中: 无需要JS <style> .box { /*垂直居中*/ display: table-cell; vertical-align:m ...

  3. 成对HMM(Pair HMMs)用于双序列比对--转载

    http://blog.163.com/bioinfor_cnu/blog/static/19446223720118205527863/ 所有文章:http://blog.163.com/bioin ...

  4. js 二进制转换为16进制数

    <!DOCTYPE html> <html> <head> <title>远程监控</title> </head> <bo ...

  5. md5 32位 加密原理 Java实现md5加密

    md5 32位 加密原理 简单概括起来,MD5 算法的过程分为四步:处理原文,设置初始值,循环加工,拼接结果. 第一步:处理原文 首先,我们计算出原文长度(bit)对 512 求余的结果,如果不等于 ...

  6. CentOS下的Autoconf和AutoMake(完善篇) 3

    在<实践篇>之后,由于需求不断修正,所以这篇是针对<实践篇>的一些完善.(以后内容会不定期增加完善) 1.不想链接到math的动态库,想连接到静态库①使用命令ldd ./mys ...

  7. Redis之字符串类型命令

    String(字符串) string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value. string 类型是二进制安全的.意思是 ...

  8. m_Orchestrate learning system---三十五、php数据和js数据的解耦:php数据(php代码)不要放到js代码中

    m_Orchestrate learning system---三十五.php数据和js数据的解耦:php数据(php代码)不要放到js代码中 一.总结 一句话总结:也就是以html为中介,用html ...

  9. API网关 动态路由、监控、授权、安全、调度

    1.API网关介绍 API网关是一个服务器,是系统的唯一入口.从面向对象设计的角度看,它与外观模式类似.API网关封装了系统内部架构,为每个客户端提供一个定制的API.它可能还具有其它职责,如身份验证 ...

  10. 3-5 回顾,快速二分法的疑点解惑:为啥先右j移动?因为设定a[left]为基准点

    快速二分法的疑点解惑:为啥先右j移动?因为设定a[left]为基准数 , 1] [91, 86, 42, 46, 9, 68, 77, 46, 7, 1] [91, 86, 42, 46, 9, 68 ...