首页 > 编程语言 > 详细

Python正则表达式re模块

时间:2019-04-01 11:46:01      阅读:119      评论:0      收藏:0      [点我收藏+]

 

正则表达式的通用语法:

表达式 描述
() 括起来的部分就是要提取的,可以用来分组
. 匹配除换行符以外的所有单个字符
X* 匹配X(单个字符)零次或多次
X+ 匹配X(单个字符)一次或多次
.* 匹配任意字符任意次(换行符除外)
? 匹配该字符前面的字符0次或1次
\d 匹配数字
\b 匹配单词的开始或结束
\w 匹配数字或者字母或下划线或汉字
{n} 表示匹配n个字符
{n,m} 表示匹配n-m个字符
\s 匹配空格
[] 表示范围,如[0-9a-zA-Z]表示匹配数字小写字母和大写字母
^ 表示匹配以某元素开头,该字符在[]中如[^0-2],表示不包含0-2
$ 表示匹配以某元素结尾
A|B 匹配A或者B

 

 

 

 

 

 

 

 

 

 

 

 

 

re模块

在Python中,使用内置的re模块来使用正则表达式,正则表达式使用\对特殊的字符进行转义,如匹配“baidu.com”,我们需要使用正则表达式"baidu\.com",但是Python的\本身也需要\转义,因此上面的正则表达式使用Python应该写成"baidu\\.com",很不方便,我们可以使用Python的原始字符串,只需要加上r前缀,这样的话,上面的正则表达式可以写成:

1 r"baidu.com"

re模块的使用步骤一般为:

1)使用compile函数将正则表达式的字符串形式编译为一个Pattern对象。

2)通过Pattern对象提供的方法对文本进行查找,获得匹配的结果(Match对象)。

3)使用Match对象提供的属性和方法获得信息,然后根据需要进行其他操作。

compile函数

compile函数用于编译正则表达式,生成Pattern对象。

1 compile(pattern, flags=0)

说明:pattern是一个正则表达式,flag是匹配模式,如忽略大小写等。

1 import re
2 
3 # 将正则表达式编译成Pattern对象
4 pattern = re.compile("\d+")

Pattern对象的常用方法有:match(),search(),findall(),finditer(),split(),sub(),subn()。

1)match方法

该方法用于查找字符串的头部,它只要找到了一个匹配的结果就返回。

1 match(string, pos=0, endpos=-1)

说明:string是待匹配的字符串,pos和endpos指定字符串的起始和终点的位置,当不指定时,默认从头部开始匹配,当匹配成功时,返回Match对象。

 1 # -*- coding:utf-8 -*-
 2 import re
 3 
 4 # 将正则表达式编译成Pattern对象
 5 pattern = re.compile("\d+")  # 匹配一个或多个数字
 6 m = pattern.match("aaa1234bbb12345cccc")  # 查找头部,没有匹配
 7 print(m)  # None
 8 
 9 m  = pattern.match("aaa1234bbbb12345cccc", 3, 7)  # 从1的位置开始匹配,可以匹配到
10 print(m)
11 
12 print(m.group())  # 返回匹配的字符串,如果需要获得整个匹配的子串时,可以使用group()或者group(0)
13 
14 print(m.start())  # 返回匹配的子串在整个字符串的起始位置
15 
16 print(m.end())  # 返回匹配的子串在整个字符串的结束位置
17 
18 print(m.span())  # 返回(start(),end())

2)search()方法

该方法用于查找字符串的任何位置,它只要找到一个匹配的结果就返回。

1 search(string, pos=0, endpos=-1):

说明:string是带匹配的字符串,pos和endpos分别为字符串的起始和结束位置,当匹配成功时返回Match对象,匹配不成功时返回None。

 1 # -*- coding:utf-8 -*-
 2 import re
 3 
 4 # 将正则表达式编译成Pattern对象
 5 pattern = re.compile("\d+")  # 匹配一个或多个数字
 6 m  = pattern.search("aaaa1111bbbb2222cccc3333", 5, 8)  # 匹配成功
 7 print(m)
 8 
 9 print(m.group())  # 返回匹配的字符串,如果需要获得整个匹配的子串时,可以使用group()或者group(0)
10 
11 print(m.start())  # 返回匹配的子串在整个字符串的起始位置
12 
13 print(m.end())  # 返回匹配的子串在整个字符串的结束位置
14 
15 print(m.span())  # 返回(start(),end())

3)findall()方法

该方法返回所有匹配的结果。

1 findall(string, pos=0, endpos=-1)

说明:string表示需要匹配的字符串,pos和endpos表示匹配字符串的起始和结束位置,匹配成功,返回匹配的列表,匹配不成功,返回空列表。

 1 # -*- coding:utf-8 -*-
 2 import re
 3 
 4 # 将正则表达式编译成Pattern对象
 5 pattern = re.compile("\d+")  # 匹配一个或多个数字
 6 m  = pattern.findall("aaaa1111bbbb2222cccc3333")  # 匹配成功
 7 
 8 print(m)
 9 
10 --------输出结果-----------
11 
12 [1111, 2222, 3333]

4)finditer()方法

1 finditer(string, pos=0, endpos=-1)

说明:该方法表示匹配所有的字符串,pos和endpos表示匹配字符串的起始和结束位置。

该方法返回所有匹配的字符串,但是它返回的是一个迭代器,通过该迭代器我们可以访问匹配的每一个字符串。

1 # -*- coding:utf-8 -*-
2 import re
3 
4 # 将正则表达式编译成Pattern对象
5 pattern = re.compile("\d+")  # 匹配一个或多个数字
6 result_iter  = pattern.finditer("aaaa1111bbbb2222cccc3333")  # 匹配成功
7 
8 for result in result_iter:
9     print("匹配的字符串为:{},位置为:{}".format(result.group(),result.span()))

5)split()方法

1 split(string, maxsplit=0)

说明:该方法表示将能够匹配的子串切割,string表示需要匹配的字符串,maxsplit表示最大的分割次数,不指定即为全部分割。

1 # -*- coding:utf-8 -*-
2 import re
3 
4 # 将正则表达式编译成Pattern对象
5 pattern = re.compile("[,;\s]+")  # 匹配, ; 空格一次或多次
6 l = pattern.split("a,b;c  d", 3)
7 print(l)

 6)sub()方法

1 sub(repl, string, count=0)

说明:该方法用来替换。

repl如果为字符串,会使用repl替换字符串中的每一个匹配的子串,并且返回替换后的字符串;如果为函数,则该函数应该只接收一个Match对象,并且返回一个不能字符串用于替换。

count用于指定替换次数。

 1 # -*- coding:utf-8 -*-
 2 import re
 3 
 4 # 将正则表达式编译成Pattern对象
 5 p = re.compile(r(\w+) (\w+))
 6 s = test aaa, test bbb
 7 
 8 
 9 def func(m):
10     return hei +   + m.group(2)
11 
12 
13 print(p.sub(rhello world, s))  # 使用hello world替换
14 print(p.sub(r\2 \1, s))  # 引用分组
15 print(p.sub(func, s))  # 替换全部
16 print(p.sub(func, s, 1))  # 最多只替换一次
17 
18 
19 -------输出结果---------
20 
21 hello world, hello world
22 aaa test, bbb test
23 hei aaa, hei bbb
24 hei aaa, test bbb

7)subn()方法

1 subn(repl, string, count=0)

该方法也是用于替换,返回一个元组,元组有两个元素,第一个和使用sub方法返回的结果一样,另一个表示替换的次数。

 1 # -*- coding:utf-8 -*-
 2 import re
 3 
 4 # 将正则表达式编译成Pattern对象
 5 p = re.compile(r(\w+) (\w+))
 6 s = test aaa, test bbb
 7 
 8 
 9 def func(m):
10     return hei +   + m.group(2)
11 
12 
13 print(p.subn(rhello world, s))  # 使用hello world替换
14 print(p.subn(r\2 \1, s))  # 引用分组
15 print(p.subn(func, s))  # 替换全部
16 print(p.subn(func, s, 1))  # 最多只替换一次
17 
18 
19 --------输出结果----------
20 
21 (hello world, hello world, 2)
22 (aaa test, bbb test, 2)
23 (hei aaa, hei bbb, 2)
24 (hei aaa, test bbb, 1)

 

Python正则表达式re模块

原文:https://www.cnblogs.com/zhuzhaoli/p/10633213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!