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

  2. HDU 2460 Network(桥+LCA)

    http://acm.hdu.edu.cn/showproblem.php?pid=2460 题意:给出图,求每次增加一条边后图中桥的数量. 思路: 先用tarjan算法找出图中所有的桥,如果lowv ...

  3. UVa 11134 传说中的车

    https://vjudge.net/problem/UVA-11134 题意:在n*n的棋盘上放n个车,使得任意两个车不相互攻击,且第i个车在一个给定的矩形Ri之内.用4个整数xli,yli,xri ...

  4. python argparse模块--转载

    add_argument:读入命令行参数,该调用有多个参数 ArgumentParser.add_argument(name or flags…[, action][, nargs][, const] ...

  5. 【Django】【四】测试

    [Testing in Django] 通过参数可控制Django项目不同级别的测试. 1. 运行sign应用下所有的测试用例: \\guest\python manage.py test sign ...

  6. ant的原理

    ANT批量完成项目代码的重新编译.打包.测试.java语言编写与平台无关的. Ant工具 Ant是一种基于Java的build工具.理论上来说,它有些类似于(Unix)C中的make ,但没有make ...

  7. 《剑指offer》第二十一题(调整数组顺序使奇数位于偶数前面)

    // 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #inclu ...

  8. Codeforces 559B - Equivalent Strings

    559B - Equivalent Strings 思路:字符串处理,分治 不要用substr(),会超时 AC代码: #include<bits/stdc++.h> #include&l ...

  9. export与export default exports与module.exports的用法

    转载:http://blog.csdn.net/zhou_xiao_cheng/article/details/52759632 本文原创地址链接:http://blog.csdn.net/zhou_ ...

  10. SpringBoot读取war包jar包Resource资源文件解决办法

    SpringBoot读取war包jar包Resource资源文件解决办法 场景描述 在开发过程中我们经常会碰到要在代码中获取资源文件的情况,而我在最近在SpringBoot项目中时碰到一个问题,就是在 ...