一、findall函数增加新的参数
Python正则中findall函数除了一些基本的用法外,我们还可以为其设置第三个参数,增强其功能,下面使用如下的字符串进行演示:
langeuage = “PythonC#\nJavaPHP”
1.匹配字符串中的’C#’
result1 = re.findall('c#',langeuage)
print("\n打印result1:")
print(result1) #打印:[],小写不能匹配
2.re.findall可以添加第三个参数,即匹配模式参数
“re.I” : 忽略大小写
result2 = re.findall('c#',langeuage,re.I)
print("\n打印result2:")
print(result2) #打印:['C#']
3.添加多个匹配模式参数,多个匹配模式参数是且关系
” . ” : 匹配除换行符\n外其他所有字符
“re.I” :忽略大小写
“re.S”:改变’.’的行为,可以匹配换行符
result3 = re.findall('c#.{1}',langeuage,re.I|re.S)
print("\n打印result2:")
print(result3) #打印:['C#\n']
二、函数re.sub:用于实现正则替换
通过下面的字符串演示re.sub函数的使用
langeuage = “C#PythonC#JavaC#PHP”
1.替换所有被匹配的字段
result1 = re.sub('C#','Go',langeuage)
print("\n打印result1:")
print(result1) #打印:GoPythonGoJavaGoPHP
2.只替换被匹配的n个字段
result2 = re.sub('C#','Go',langeuage,2)
print("\n打印result2:")
print(result2) #打印:GoPythonGoJavaC#PHP
3.字符串自带的方法实现替换
result3 = langeuage.replace("C#","GO")
print("\n打印result3:")
print(result3) #打印: GOPythonGOJavaGOPHP
4.re.sub的第二个参数可以是一个函数
def convert(value):
print(value)
matched = value.group()
return '!!' + matched + '!!'
result4 = re.sub('C#',convert,langeuage)
print("\n打印result4:")
print(result4)
'''
打印:
<_sre.SRE_Match object; span=(0, 2), match='C#'>
<_sre.SRE_Match object; span=(8, 10), match='C#'>
<_sre.SRE_Match object; span=(14, 16), match='C#'>
打印result4:
!!C#!!Python!!C#!!Java!!C#!!PHP
'''
5.函数当做参数传递
操作要求:替换字符串中所有大于等于6的数为9.小于6的数为0
string = 'A8C3721D86'
def convert1(value):
matched = value.group()
if int(matched) >=6:
return '9'
else:
return '0'
result5 = re.sub('\d',convert1,string)
print("\n打印result4:")
print(result5) #打印:A9C0900D99
三、re.match与re.search:用于正则查找
通过下面的字符串演示这两个函数的使用
testStr= ‘A8C3721D86’
1.re.match从字符串起始位置匹配,因为testStr起始位置不是数字,所以匹配结果为None
result6 = re.match('\d',testStr)
print("\n打印result6:")
print(result6) #打印:None
2.re.search区别与re.match,从整个字符串中搜索,直到找到一个合适的结果就返回
result7 = re.search('\d',testStr)
print("\n打印result7:")
print(result7) #打印:<_sre.SRE_Match object; span=(1, 2), match='8'>
print(result7.group()) #打印:8
3.对比re.findall
result8 = re.findall('\d',testStr)
print("\n打印result8:")
print(result8) #打印:['8', '3', '7', '2', '1', '8', '6']
使用总结
1.不同于re.findall,re.search与re.match返回的结果是对象,可以使用group函数获取值;
2.re.search与re.match,都是只需要满足一个结果就返回;