Python学习(16):正则表达式(4)-正则函数的使用

一、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,都是只需要满足一个结果就返回;

猜你喜欢

转载自blog.csdn.net/dreamcoffeezs/article/details/80620935