正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使Python语言拥有全部的正则表达式功能。

要想使用正则表达式,首先需要导入re模块。 import re

re模块属性

re.__all__
返回一个包含re函数名的列表。

1
2
print(re.__all__)
['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'compile', 'purge', 'template', 'escape', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE', 'error', 'finditer']

re.__version__
返回re的版本

常用的正则表达式处理函数

re.match(pattern, string, flags=0)

pattern:匹配的正则表达式
string:要匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

判断pattern是否在string开始位置,如果有,返回匹配的对象,否则返回None。请注意,即使在多行模式下,re.match()也只能在字符串的开头匹配,而不能在每行的开头匹配。

可以使用group(num) 或 groups() 匹配对象函数来获取匹配的结果。

“match”的用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import re
string = 'test1234@gmail.com或13076879876电话'
item1 = re.match(r'test',string)
item2 = re.match(r'1234',string)
print(item1)  #输出匹配对象Match object
print(item2)  #输出None
if item1:
   print("item1.group() : ", item1.group())
else:
   prin("No match!!")

执行以上程序会输出如下结果:

1
2
3
<_sre.SRE_Match object; span=(0, 4), match='test'>
None
item1.group() :  test

fullmatch(pattern, string, flags=0)

pattern:匹配的正则表达式
string:要匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

判断pattern是否是string的全部,如果是,返回匹配的对象,否则返回None

“fullmatch”的用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import re
string = 'test1234@gmail.com'
item1 = re.fullmatch(r'test1234@gmail.com',string)
item2 = re.fullmatch(r'test1234',string)
print(item1)  #输出匹配对象Match object
print(item2)  #输出None
if item1:
   print("item1.group() : ", item1.group())
else:
   prin("No match!!")

执行以上程序会输出如下结果:

1
2
3
<_sre.SRE_Match object; span=(0, 18), match='test1234@gmail.com'>
None
item1.group() :  test1234@gmail.com

search(pattern, string, flags=0)

pattern:匹配的正则表达式
string:要匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

判断string里面是否包含pattern,如果有,返回匹配的对象,否则返回None

可以使用group(num) 或 groups() 匹配对象函数来获取匹配的结果。

“search”的用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import re
string = 'test1234@gmail.com或13076879876电话'
item1 = re.search(r'test',string)
item2 = re.search(r'1234',string)
item3 = re.search(r'5678',string)
print(item1)  #输出匹配对象Match object。结果是'test'
print(item2)  #输出匹配对象Match object。结果是'1234'
print(item3)  #输出None
if item1:
   print("item1.group() : ", item1.group())
else:
   prin("No match!!")

执行以上程序会输出如下结果:

1
2
3
4
<_sre.SRE_Match object; span=(0, 4), match='test'>
<_sre.SRE_Match object; span=(4, 8), match='1234'>
None
item1.group() :  test

findall(pattern, string, flags=0)

pattern:匹配的正则表达式
string:要匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

查找string中全部匹配pattern的项,返回一个列表。

“findall”的用法

1
2
3
4
5
import re
string = 'test1234@gmail.com或12076879876电话'
item1 = re.findall(r'12',string)
print(type(item1)) #输出匹配对象的类型
print(item1)  #输出匹配对象列表。

执行以上程序会输出如下结果:

1
2
<class 'list'>
['12', '12']

finditer(pattern, string, flags=0)

pattern:匹配的正则表达式
string:要匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

效果与findall相似,只不过finditer返回一个迭代器,拥有group方法(匹配的字符串)和span方法(匹配字符串的位置)

“finditer”的用法

1
2
3
4
5
6
7
import re
string = 'test1234@gmail.com或12076879876电话'
item1 = re.finditer(r'12',string)
print(type(item1)) #输出匹配对象的类型
print(item1)
for i in item1:
    print(i.group(),i.span())

执行以上程序会输出如下结果:

1
2
3
4
<class 'callable_iterator'>
<callable_iterator object at 0x7f1438c0fc18>
12 (4, 6)
12 (19, 21)

sub(pattern, repl, string, count=0, flags=0)

pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

判断string里面是否含有pattern,如果含有则使用repl替换,返回新字符串。不改变原有字符串。count定义替换的次数,如果不填写,默认替换字符串中全部匹配的项。

“sub”的用法1

1
2
3
4
5
6
import re
string = 'test1234@gmail.com或13076879876电话'
item1 = re.sub(r'test','5678',string)  #查找字符串'test',并替换为'5678'
item2 = re.sub(r'1234','',string)      #查找字符串'1234',并替换为''
print(item1)  
print(item2)  

执行以上程序会输出如下结果:

1
2
56781234@gmail.com或13076879876电话
test@gmail.com或13076879876电话

“sub”的用法2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#定义乘以2的函数
def double(s):
    value = s.group('value')
    return str(value * 2)

import re
string = 'test1234@gmail.com或13076879876电话'
item1 = re.sub(r'(?P<value>test)',double,string)      #查找字符串'test',并 * 2
item2 = re.sub(r'(?P<value>1234)',double,string)      #查找字符串'1234',并 * 2
print(item1)
print(item2)

执行以上程序会输出如下结果:

1
2
testtest1234@gmail.com或13076879876电话
test12341234@gmail.com或13076879876电话

subn(pattern, repl, string, count=0, flags=0)

同sub函数,但是返回一个元组,包含修改后的字符串以及修改的次数。

“subn”的用法

1
2
3
4
5
6
7
8
import re
string = 'test1234@gmail.com或13076879876电话'
item1 = re.subn(r'test','5678',string)  #查找字符串'test',并替换为'5678'
item2 = re.subn(r'1234','',string)      #查找字符串'1234',并替换为''
print(type(item1))
print(type(item2))
print(item1)
print(item2)

执行以上程序会输出如下结果:

1
2
3
4
<class 'tuple'>
<class 'tuple'>
('56781234@gmail.com或13076879876电话', 1)
('test@gmail.com或13076879876电话', 1)

split(pattern, string, maxsplit=0, flags=0)

pattern:匹配的正则表达式
string:要匹配的字符串。
maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

以pattern作为分隔符给string进行分隔,返回一个列表。maxsplit定义最多分几次,不写默认全部进行分隔。

“split”的用法

1
2
3
4
5
6
7
8
import re
string = 'test1234@gmail.com或12076879876电话'
item1 = re.split(r'12',string)   #查找字符串12,并分割全部。
item2 = re.split(r'12',string,1) #查找字符串12,并分割,但分割1次
print(type(item1))
print(type(item2))
print(item1)
print(item2)

执行以上程序会输出如下结果:

1
2
3
4
<class 'list'>
<class 'list'>
['test', '34@gmail.com或', '076879876电话']
['test', '34@gmail.com或12076879876电话']

compile(pattern, flags=0)

pattern:匹配的正则表达式
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

预编译正则表达式。返回正则表达式对象。上面的方法都是在进行调用的时候开始编译正则表达式,如果查找条目较多,比如说5亿个数据,每次都编译的话,效率必然会受到影响。而使用compile函数则可以预编译正则表达式,这样就不必每次都编译正则表达式,提高效率。

“compile”的用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import re
string = 'test1234@gmail.com或12076879876电话'
pattern = re.compile(r'12')
item1 = re.split(pattern,string)   #查找字符串12,并分割全部。
item2 = re.split(pattern,string,1) #查找字符串12,并分割,但分割1次
print(type(pattern))
print(pattern)
print(type(item1))
print(type(item2))
print(item1)
print(item2)

执行以上程序会输出如下结果:

1
2
3
4
5
6
<class '_sre.SRE_Pattern'>
re.compile('12')
<class 'list'>
<class 'list'>
['test', '34@gmail.com或', '076879876电话']
['test', '34@gmail.com或12076879876电话']

escape(pattern)

pattern:匹配的正则表达式。

对字符串中的非字母数字进行转义,将字符串转义为python能够识别的正则表达式。

用法:

1
2
source='qq14717287xx@qq.com&10010/10086'
print(re.escape(source))

结果如下:

1
qq14717287xx\@qq\.com\&10010\/10086

“escape”的用法

1
2
3
4
5
6
import re
string = 'test1234@gmail.com或12076879876/13089762456电话'
e = re.escape(string)
print(type(e))
print(string)
print(e)

执行以上程序会输出如下结果:

1
2
3
<class 'str'>
test1234@gmail.com或12076879876/13089762456电话
test1234\@gmail\.com\12076879876\/13089762456\\

转载请注明本网址。