^表示行的开头,^\d表示必须以数字开头
$表示行的结束,$\d表示必须以数字结束
re模块是python提供的正则表达式模拟,其中比较常用的函数:
1、search() : re.search(pattern(正则表达式),string(在这个字符串中查找),flags=0)
在整个字符串中查找,返回第一个匹配内容,如果找到返回match对象,没找到返回None
2、match() : re.match(pattern(正则表达式),string(在这个字符串中查找),flags=0)
从字符串的第一个字符开始匹配,如果找到返回match对象,没找到返回None
import re
p=r'\[email protected]' # r'正则表达式'
text1="my eamil address is [email protected]"
text2="[email protected]"
search_result1=re.search(p,text1)
match_result1=re.match(p,text1)
search_result2=re.search(p,text2)
match_result2=re.match(p,text2)
print(search_result1)
print(match_result1)
print(search_result2)
print(match_result2)
#match对象的方法
print("======match对象的方法=====")
print(search_result1.group()) #匹配成功的内容
print(search_result1.start()) #开始索引
print(search_result1.end()) #结束索引
print(search_result1.span()) #跨度
运行结果如下:
None
======match对象的方法=====
[email protected]
20
32
(20, 32)
3、findall() : re.findall(pattern,string,flags=0)
在字符串中匹配,如果成功返回match对象,如果失败返回None
4、finditer(): re.findall(pattern,string,flags=0)
在字符串中匹配,如果成功返回match可迭代对象,如果失败返回None
import re
p=r'[Jj]ava'
text='I like Java and java.'
match_list=re.findall(p,text)
match_iter=re.finditer(p,text)
print(match_list)
print(match_iter)
for i in match_iter:
print(i)
运行结果:
['Java', 'java']
5、split(): re.split(pattern,string,maxaplit=0(最大分割次数),flags=0)
按照匹配的子字符串进行分割
import re
p=r'\d+'
text='AB12CD34EF'
split_result1=re.split(p,text,maxsplit=1);
split_result2=re.split(p,text,maxsplit=2);
split_result3=re.split(p,text);
print(split_result1)
print(split_result2)
print(split_result3)
运行结果:
['AB', 'CD34EF']
['AB', 'CD', 'EF']
['AB', 'CD', 'EF']
6、sub(): re.sub(pattern,repl(替换的字符串),string,count=0(替换的次数),flags=0)
替换匹配的子字符串,返回替换之后的字符串
import re
p=r'\d+'
text='AB12CD34EF'
split_result1=re.sub(p,"000",text,count=1)
split_result2=re.sub(p,"000",text,count=2)
split_result3=re.sub(p,"000",text);
print(split_result1)
print(split_result2)
print(split_result3)
运行结果:
AB000CD34EF
AB000CD000EF
AB000CD000EF
7、compile(): compile(pattern[,flag=0])
编译之后的正则表达式会生成一个regex对象可以重复利用,速度也会比较快
import re
p=r'\d+'
text='AB12CD34EF'
regex=re.compile(p)
result=regex.split(text,maxsplit=1)
print(result)
运行结果:
['AB', 'CD34EF']
下面是编译后和没有编译的一些方法的对比:
regex.search(string[,pos(开始位置)[,endpos(结束位置)]])