python中的正则表达式

一.预备知识正则

1.正则介绍

Python 中的正则,本质上是嵌入在Python中的一种微小的、高度专业化的编程语言,可通过 re 这个内置模块获得。
正则表达式模式几乎和 shell 中的一样,更接近 grep -P 的效果,因为 Python 中的 re 模块提供的是类似
Perl 语言中的正则表达式。 正则表达式模式会被编译成一系列字节码,然后由用 C 编写的匹配引擎执行。

2.陷阱

友情提示:

正则表达式语言相对较小且受限制,因此并非所有可能的字符串处理任务都可以使用正则表达式完成。

还有一些任务 可以 用正则表达式完成,但表达式变得非常复杂。 在这些情况下,你最好编写 Python 代码来进行处理;虽然 Python
代码比精心设计的正则表达式慢,但它也可能更容易理解。

3.特殊字符
在 Python 中有一些特殊的字符,在正则表达式模式中的作用和 shell 和 grep -P 时候有一些细微的差别

正则特殊字符匹配内容
\w匹配单个字母、数字、汉字(shell中没有)或下划线 类似于 [a-zA-Z0-9_]
\d匹配单个数字 类似于 [0-9]
\s匹配单个任意的空白符,这等价于 [ \t\n\r\f\v]
\S匹配任何非空白字符, [^ \t\n\r\f\v]

二.re模块

1.常用方法

match()就看开头有没有,只看整个字符串开始的位置。
举例:

s = "isinstance yangge enumerate www.qfedu.com 1997"
import re
In [4]: r = re.match("is\w+", s)

In [8]: r.group()  # 获取匹配成功的结果
Out[8]: 'isinstance'

search()只查第一个匹配的
从整个字符串的开头找到最后,当地一个成功匹配后,就停止匹配。

In [9]: r = re.search("a\w+", s)

In [10]: r.group()
Out[10]: 'ance' 

findall() 查到所有
搜索整个字符串,找到所有匹配成功的字符串,比把这些字符串放在一个列表中返回。

In [16]: r = re.findall("a\w+", s)

In [17]: r
Out[17]: ['ance', 'angge', 'ate']

sub() 替换
把匹配成功的字符串,进行替换。

#语法:
"""
("a\w+",    "100",        s,     2)
匹配规则,替换成的新内容,  被搜索的对象, 有相同的话替换的次数


"""
In [24]: r = re.sub("a\w+", "100", s, 2)
  
In [25]: r
Out[25]: 'isinst100 y100 enumerate www.qfedu.com 1997'

#模式不匹配时,返回原来的值

split() 分割
awk -F '[d]' 一样效果,以匹配到的字符进行分割,返回分割后的列表

In [26]: s
Out[26]: 'isinstance yangge enumerate www.qfedu.com  1997'

In [27]: r = re.split("a", s, 1)               #1  分割第一个a

使用多个界定符分割字符串

 line = 'asdf fjdk; afed, fjek,asdf,  foo'
 import re
 re.split(r'[;,\s]\s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

\b :匹配边界
2.正则分组

就是从已经成功匹配的内容中,再去把想要的取出来

#match
In [64]: s
Out[64]: 'isinstance yangge enumerate www.qfedu.com  1997'

In [65]: r = re.match("is(\w+)", s)

In [66]: r.group()
Out[66]: 'isinstance'

In [67]: r.groups()
Out[67]: ('instance',)
    
    
    
#search
#命名分组
In [87]: r = re.search("is\w+\s(?P<name>y\w+e)", s)  #y开头e结尾中间任意多个字符

In [88]: r.group()                 #拿正则搜到的所有值
Out[88]: 'isinstance yangge'

In [89]: r.groups()                #只拿括号里的
Out[89]: ('yangge',)

In [90]: r.groupdict()              #将括号里的以字典形式拿出 
Out[90]: {'name': 'yangge'}

    
#findall

In [98]: s
Out[98]: 'isinstance yangge enumerate www.qfedu.com  1997'

In [99]: r = re.findall("a(\w+)", s)

In [100]: r
Out[100]: ['nce', 'ngge', 'ny', 'te']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值