如果直接给出字符,就是精确匹配。对于特殊字符- ,在正则表达式中要用转义字符\转义。
 
\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. luogu P4396 [AHOI2013]作业

    目录 题目 思路 错误&&傻叉 代码 题目 luogu 思路 每次都是插入比之前所有数字大的数,所以之前的答案就不会改变 用fhq-treap求出原序列,然后用树状数组依次算出每个值得 ...

  2. MVC ---- EF批处理

    #region 批处理 ///<summary> ///两增一删一改 ///</summary> public void Save(){ //新增参一 Parameter pa ...

  3. BZOJ4896 [Thu Summer Camp2016]补退选

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. go变量赋初值

    package main import "fmt" func variableinitial(){ , var s string="abc" fmt.Print ...

  5. SQL实现新增表,表名更改,列名更改,约束更改等

    --新建表: CREATE TABLE TABLENAME ( ID INT IDENTITY (1,1) PRIMARY KEY , NAME VARCHAR(50) DEFAULT 'HELLO' ...

  6. 使用 XPath 选择器

    在前面的内容中,我们掌握了一些 CSS 选择器和它们的使用方法,以及 rvest 包中用于提取网页内容的函数.一般来说,CSS 选择器足够满足绝大部分的 HTML 节点匹配的需要.但是,当需要根据某些 ...

  7. [原]关于phycis集成到osgearth的(瞎写写)

    基于全球的物理系统集成技术 引言 随着····· 概述 基于osgEarth渲染引擎,引入先进的物理引擎physics. 本篇主要讲述:原理和解决思路. 原理要点: 空间坐标转换 物理引擎与渲染引擎同 ...

  8. android 开发 出错

    Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process.Pr ...

  9. const 学习笔记

    #include<stdlib.h> #include<iostream> using namespace std; int main(){ // const 仅仅起到是否为常 ...

  10. SpringMVC是如何逐步简化Servlet的编程的

    转自:https://www.cnblogs.com/winterfells/p/8476759.html Servlet和JSP是开发java Web应用程序的两种基本技术,Spring MVC是S ...