正则表达式的功能很强大,我们常常用的搜索功能就是通过它来实现的,只要有足够的细心和耐心就很容易学会。
正则表达式(Regular Expression)是一种小型的、高度专业化的编程语言,通常被用来检索、替换那些符合某个模式(规则)的文本,在Python中通过内嵌集成re模块,可以直接调用。
最简单的正则表达式就是普通字符串,可以匹配其自身。比如:正则表达式'python'可以匹配字符串'python'。
常用的字符含义
. 代表任意字符
[0-9]0到9之间的任意数字
[a-z] 小写字母任意之一
[A-Z] 大写字母任意之一
\d 等同于[0-9]
\D 等同于[^0-9]匹配非数字
\w 等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线
\W 等同于[^a-z0-9A-Z_]等同于上一条取非
+ 前面元素至少出现一次
* 前面元素出现0次或多次
? 匹配前面的一次或0次
^ 作为开始标记
$ 作为结束标记
| 逻辑或操作符
- 定义一个区间
\ 对下一字符取非(通常是普通变特殊,特殊变普通)
匹配前一个字符或子表达式n次
匹配前一个字符或子表达式至少m次至多n次
re模块中常用的函数
1、compile()
编译正则表达式模式,返回一个对象的模式。
格式:
re.compile(pattern,flags=0)
pattern: 编译时用的表达式字符串。
flags 编译标志位,用于修改正则表达式的匹配方式。
>>> string1 = 'Python is a very good programming language'
>>> pattern1 = re.compile(r'Python')
>>> pattern1
re.compile('Python')
>>> pattern1.findall()
['Python']
2、match()
决定RE是否在字符串刚开始的位置匹配。
格式:
re.match(pattern, string, flags=0)
>>> m = re.match(r'hello','hello,world!Hello,World!',re.I)
>>> m.group()
'hello'
(注:re.I使匹配不分大小写)
3、search()
在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
格式:
re.search(pattern, string, flags=0)
>>> re.search(r'hello','World,Hello!',re.I).group()
'Hello'
注:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
4、findall()
遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
格式:
re.findall(pattern, string, flags=0)
>>> p = re.compile(r'\d+')
>>> p.findall('aaa12bbb34c56d78')
['12', '34', '56', '78']
(注:找到字符串中所有的数字,+表示数字至少出现一次)
5、finditer()
搜索string,找到匹配的所有子串,并把它们作为一个迭代器返回。
格式:
re.finditer(pattern, string, flags=0)
>>> iter = re.finditer(r'\d+','one1two2three3four4')
>>> for i in iter:
print(i.group())
1
2
3
4
6、split()
按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。
格式:
re.split(pattern, string[, maxsplit])
>>> re.split(r'\d+','one1two2three3four4five5')
['one', 'two', 'three', 'four', 'five', '']
以上是正则表达式的一些总结,欢迎大家指正。
领取专属 10元无门槛券
私享最新 技术干货