正则介绍
- Python中的正则,本质上式嵌入在python中的调的一种微小的,高度专业化的编程语言,可通过 re 这个内置模块获得。
- 正则表达式模式几乎和shell中的一样,更接近 grep -P 的效果,因为Python中的 re 模块提供的是类似Perl语言中的正则表达式。
- 正则表达式模式会被编译成一系列字节码,然后用C编写的匹配引擎执行。
友情提示:
- 正则表达式语言相对较小且受限制,因此并非所有可能的字符串处理任务都可以使用正则表达是完成。
- 还要一些任务 可以 用正则表达式完成,但表达式变得非常复杂。在这些情况下
特殊字符
More Actions正则特殊字符 | 匹配内容 |
---|---|
\w | 匹配单个字母、数字、汉字(shell中没有)或下划线 类似于 [a-zA-Z0-9_] |
\d | 匹配单个数字 类似于 [0-9] |
\s | 匹配单个任意的空白符,这等价于 [ \t \n \r \f \v] |
\s | 匹配任何非空白字符, [ \t \n \f \v] |
re 模块的方法
常用方法
match() 就看开头有没有
- 只在整个字符串的起始位置进行匹配
实例:
s = "isinstance qiang enumerate www.lwq.com 1998"
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 l100 enumerate www.lwq.com 1998'
# 模式不匹配时,返回原来的值
split() 分割
- 和 awk -F ‘[d]’ 一样效果,以匹配到的字符进行分割,返回分割后的列表
In [26]: s
Out[26]: 'isinstance lwq enumerate www.lwq.com 1998'
In [27]: r = re.split("a", s, 1)
- 使用多个界定符分割字符串
>>> line = 'asdf fjdk; afed, fjek,asdf, foo'
>>> import re
>>> re.split('[;,\s]\s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
正则分组
- 就是从已经成功匹配的内容中,再去把想要的取出来
In [26]: s ='isinstance qiang enumerate www.lwq.com 1998'
In [87]: r = re.search("is\w+\s(q\w+e)", s)
In [88]: r.group()
Out[88]: 'isinstance qiang'
In [89]: r.groups()
Out[89]: ('qiang',)