正则表达式本质就是表示某种规则的一串字符

匹配的规则叫做模式(pattern),模式作用于对象。

模式和对象可以是Unicode或者字节,但是,不能够混用,比如:模式为Unicode,对象为字节,像这样就是错误的!

当有替换需求时,替换字符串的类型也要注意和模式、对象的类型保持一致。(要么都是Unicode,要么都是字节)

下面来谈谈反斜杠(\),我们知道\+字符,可能表示一种特殊的含义,当然也可能表示\和字符2个普通字符。

比如:\d表示数字,\k表示\和k这2个普通字符。

在python中字符串分为2种:

原始字符串(raw string)和字符串

之所以搞个原始字符串,就是来应对转义字符这个大麻烦!

比如:我想表示\和b,如果我用惯性思维写成'\b',那么就傻逼了!因为\将b设置为有特殊含义的字符。

这时必须写成'\\b',但是这种写法太low了!于是搞个原始字符串的东西,前面的可以设置成r'\b'。

虽然加了个r但是相比'\\b'的写法,友好了不少!

所以:'\\\\'和r'\\'是等效的,表示普通字符\。

总结:如果字符中没有\,原始字符串就和字符串一样。

>>> re.findall('a','abkk')
['a']
>>> re.findall(r'a','abkk')
['a']

在正则表达式后面加个?,表示非贪婪匹配(最短匹配)。

re模块中常用的方法:

1、compile()

编译正则表达式的模式为对象模式,这样可以提高执行效率。

语法:

re.compile(r'pattern',[flags])

其中r的含义是不转义字符串,也就是说\t就是\和t。

例如:

import re
hello = "hello,i am tom,nice to konw u."
a = re.compile(r'to')
b = a.findall(hello) ['to','to']

2、match()

匹配的字符串必须按照pattern开头,否则匹配不到。

语法:

re.match(pattern,string,[flags])

例如:

>>> a = "hello"
>>> b = re.match(r'l',a)
>>> b
>>> c = re.match(r'he',a)
>>> c
<_sre.SRE_Match object; span=(0, 2), match='he'>

3、search()

匹配到第一个pattern就返回结果。

语法:

re.search(pattern,string,[flags])

例如:

>>> a = "hellohe"
>>> c = re.search(r'he',a).group()
>>> c
'he'

注:group()方法用来返回一个字符串,因为search()方法返回的是一个match对象。

如果正则中的pattern包含引号,那么需要注意使用\

>>> a = re.search(r'__version__ = [\'"]([^\'"]+)[\'"]',"__version__ = '3.7.0'").group(1)
>>> a
'3.7.0'

单引号中再次使用单引号,必然会造成错误,这个时候,需要在单引号前面加个转义字符(\)。

4、findall()

匹配所有的pattern并返回一个列表。

语法:

re.findall(pattern,string,[flags])

例如:

>>> a = "hello12kk32"
>>> b = re.findall(r'\d+',a)
>>> b
['12', '32']

5、sub()

匹配并替换。

语法:

re.sub(pattern,repl,string,count)

例子:

import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', '-', text))
执行结果如下:
JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on... 其中第二个参数是替换后的字符串;本例中为'-' 第四个参数指替换个数。默认为0,表示每个匹配项都替换。

6.re.escape(pattern)

脱离除ascii英文、数字、下划线之外的字符串。

在处理正则时非常有效。

>>> re.escape('www.baidu.com')
'www\\.baidu\\.com'

python模块学习之re的更多相关文章

  1. 【转】Python模块学习 - fnmatch & glob

    [转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...

  2. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  3. Python模块学习filecmp文件比较

    Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...

  4. python模块学习第 0000 题

    将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...

  5. Python模块学习:logging 日志记录

    原文出处: DarkBull    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...

  6. 解惑Python模块学习,该如何着手操作...

    Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...

  7. Python模块学习

    6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...

  8. Python模块学习系列

    python模块-time python模块-datetime python模块-OS模块详解

  9. Python模块学习遇到的问题

    Python使用import导入模块时报ValueError: source code string cannot contain null bytes的解决方案 Python使用import导入模块 ...

  10. Python 模块学习:re模块

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. 方法/属性 作用 match() 决定 R ...

随机推荐

  1. [BZOJ 1833] 数字计数

    Link: BZOJ 1833 传送门 Solution: 比较明显的数位DP 先预处理出1~9和包括前导0的0的个数:$pre[i]=pre[i-1]*10+10^{digit-1}$ (可以分为首 ...

  2. [UOJ198]时空旅行

    看懂题目就知道$y,z$是没用的,这题相当于是给一堆$(x_i,c_i)$和询问$x_q$,要求$(x_q-x_i)^2+c_i$的最大值 先把这个式子拆开:$-2x_ix_q+x_i^2+c_i+x ...

  3. 【莫队算法】【权值分块】bzoj3585 mex

    orz PoPoQQQ. 本来蒟蒻以为这种离散化以后就对应不起来的题不能权值分块搞的说. ……结果,实际上>n的权值不会对答案作出贡献. #include<cstdio> #incl ...

  4. Exercise02_15

    import javax.swing.JOptionPane; public class Distance { public static void main(String[] args){ Stri ...

  5. 十面阿里 Java 程序员,最终拿下阿里 P6 offer!

    转子:https://mp.weixin.qq.com/s/RkMxPbm8E99-rTZKmvBy6Q 今天介绍小编的一个朋友,他现今有四年开发经验了,前前后后为了进阿里面试十次(阿里旗下—蚂蚁金服 ...

  6. Swift中的GCD——常见的dispatch方法

    什么是GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法.该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4.0中.GCD ...

  7. JAVA 基本概念和编码规范

    概括性描述:一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 基本概念: 下面简要介绍下类.对象.方法和属性的概念. 对象:对象是类的一个实例,有状态和行为.例如, ...

  8. Word中插入带公式的Visio注意事项

    有时候发现,有的公式显示的间距特别大,那么在word中右键打开Visio,改好后,保存了,word里还是那样. 因为你需要吧改好的另存为原来的visio文件(名字.位置要一样,就是说替换原来的文件), ...

  9. SpringMVC——redirect重定向跳转传值

    原文:https://my.oschina.net/u/2273085/blog/398374 spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url ...

  10. JS中的import和require区别

    1.import xx from yy的方式是静态编译,即编译时加载,要写在文件的最上头,但是import()函数可以实现动态加载,写在任何地方 2.require是动态加载,即运行时加载,理论上可以 ...