python中的re模块

^表示行的开头,^\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(结束位置)]]) 

你可能感兴趣的:(python学习)