本文讲解正则表达式常用的几大函数方法:
| 方法 | 使用格式 | 讲解 |
|---|---|---|
| match | match(string, pos=0, endpos=-1) | 方法用于查找字符串的头部,它只要找到了一个匹配的结果就返回 |
| search | search(string, pos=0, endpos=-1) | 方法用于查找字符串的任何位置,它只要找到一个匹配的结果就返回 |
| findall | findall(string, pos=0, endpos=-1) | 方法返回所有匹配的结果 |
| finditer | finditer(string, pos=0, endpos=-1) | 通过该迭代器我们可以访问匹配的每一个字符串 |
| split | slit(strng, maxsplit=0) | 方法表示将能够匹配的子串切割 |
| sub | sub(repl, string, count=0) | 方法用来替换 |
| subn | subn(repl, string, count=0) | 方法也是用于替换,返回一个元组 |
该方法用于查找字符串的头部,它只要找到了一个匹配的结果就返回,说明:string是待匹配的字符串,pos和endpos指定字符串的起点和终点的位置,当不指定时,默认从头部开始匹配,当匹配成功时,返回Match对象。
import re """ match(string, pos=0, endpos=-1) 该方法用于查找字符串的头部,它只要找到了一个匹配的结果就返回 说明:string是待匹配的字符串,pos和endpos指定字符串的起点和终点的位置 当不指定时,默认从头部开始匹配,当匹配成功时,返回Match对象 """ test_str = "aaaa12345678sfsdf" pattern = re.compile(r"d+") matcher = pattern.match(test_str, 4, 12) print(matcher) #2.search方法讲解print(matcher.group()) # 12345678, 返回匹配的字符串,可以使用group()或者group(0) print(matcher.start()) # 4, 返回匹配的字符串在整个字符串的起始位置 print(matcher.end()) # 12, 返回匹配的字符串在整个字符串的结束位置 print(matcher.span()) # (4, 12), 返回(star(), end())
该方法用于查找字符串的任何位置,它只要找到一个匹配的结果就返回,
说明:string是带匹配的字符串,pos和endpos分别为字符串的起始和结束位置,
当匹配成功时返回Match对象,匹配不成功时返回None。
import re """ search(string, pos=0, endpos=-1) 该方法用于查找字符串的任何位置,它只要找到一个匹配的结果就返回 说明:string是带匹配的字符串,pos和endpos分别为字符串的起始和结束位置 当匹配成功时返回Match对象,匹配不成功时返回None """ # egg_001:匹配到第一个就返回 test_str = "aaa777bbb888ccc999" pattern = re.compile(r"d+") matcher = pattern.search(test_str) print(matcher) #3.findall方法讲解# egg_002:指定起始位置 test_str = "aaa000bbb111ccc222" pattern = re.compile(r"d+") matcher = pattern.search(test_str, 3, 12) print(matcher) # print(matcher.group()) # 000, 返回匹配的字符串,可以使用group()或者group(0) print(matcher.start()) # 3, 返回匹配的字符串在整个字符串的起始位置 print(matcher.end()) # 6, 返回匹配的字符串在整个字符串的结束位置 print(matcher.span()) # (3, 6), 返回(star(), end())
该方法返回所有匹配的结果,
说明:string是带匹配的字符串,pos和endpos分别为字符串的起始和结束位置,
当匹配成功时返回匹配的列表,匹配不成功时返回空列表,
捕获:findall函数,在正则匹配里,如果有分组,就仅仅匹配分组里面的内容,
然后返回这个组的列表,如果有多个分组,那就把每一个分组看成一个单位,
组合成一个元组,然后返回一个含有多个元组的列表。
import re """ findall(string, pos=0, endpos=-1) 该方法返回所有匹配的结果 说明:string是带匹配的字符串,pos和endpos分别为字符串的起始和结束位置, 当匹配成功时返回匹配的列表,匹配不成功时返回空列表, 捕获:findall函数,在正则匹配里,如果有分组,就仅仅匹配分组里面的内容, 然后返回这个组的列表,如果有多个分组,那就把每一个分组看成一个单位, 组合成一个元组,然后返回一个含有多个元组的列表。 """ # egg_001:匹配所有位置并返回结果 test_str = "aaa111bbb222ccc333" pattern = re.compile(r"d+") matcher = pattern.findall(test_str) print(matcher) # ['111', '222', '333'] # egg_002:设置起始位置, 返回特定范围内的结果 test_str = "aaa111bbb222ccc333" pattern = re.compile(r"d+") matcher = pattern.findall(test_str, 2, 13) print(matcher) # ['111', '222']4.finditer方法讲解
说明:string是带匹配的字符串,pos和endpos分别为字符串的起始和结束位置,
说明:该方法返回所有匹配的字符串,但是它返回的是一个迭代器,
通过该迭代器我们可以访问匹配的每一个字符串。
import re """ finditer(string, pos=0, endpos=-1) 说明:string是带匹配的字符串,pos和endpos分别为字符串的起始和结束位置, 说明:该方法返回所有匹配的字符串,但是它返回的是一个迭代器 通过该迭代器我们可以访问匹配的每一个字符串 """ # egg_001:匹配所有符合要求的并返回一个迭代器 test_str = "aaa111bbb222ccc333" pattern = re.compile(r"d+") matcher = pattern.finditer(test_str) print(matcher) #5.split方法讲解for result in matcher: print("找到的字符串{0},位置是{1}".format(result.group(), result.span())) # 找到的字符串111,位置是(3, 6) # 找到的字符串222,位置是(9, 12) # 找到的字符串333,位置是(15, 18) # egg_002:设置匹配起始位置,返回范围内匹配结果 test_str = "aaa111bbb222ccc333" pattern = re.compile(r"d+") matcher = pattern.finditer(test_str, 3, 12) print(matcher) # for result in matcher: print("找到的字符串{0},位置是{1}".format(result.group(), result.span())) # 找到的字符串111,位置是(3, 6) # 找到的字符串222,位置是(9, 12)
该方法表示将能够匹配的子串切割,说明:string表示需要匹配的字符串,
maxsplit表示最大的分割次数,不指定即为全部分割。
import re """ slit(strng, maxsplit=0) 说明:该方法表示将能够匹配的子串切割,string表示需要匹配的字符串, maxsplit表示最大的分割次数,不指定即为全部分割 """ # egg_001: 返回切割后的结果 test_str = "aaaa bbbb cccc,dddd;eeee" pattern = re.compile(r"[,;s]+") matcher = pattern.split(test_str) print(matcher) # ['aaaa', 'bbbb', '', 'cccc', 'dddd', 'eeee'] # egg_002:设置切割次数,返回切割后的结果 test_str = "aaaa bbbb cccc,dddd;eeee" pattern = re.compile(r"[,;s]+") matcher = pattern.split(test_str, 2) print(matcher) # ['aaaa', 'bbbb', 'cccc,dddd;eeee']6.sub方法讲解
该方法用来替换,
说明:repl如果为字符串,会使用repl替换字符串中的每一个匹配的子串,并且返回替换后的字符串,
如果为函数,则该函数应该只接收一个Match对象,并且返回一个字符串用于替换,
count用于指定替换次数。
import re
"""
sub(repl, string, count=0)
该方法用来替换
说明:repl如果为字符串,会使用repl替换字符串中的每一个匹配的子串,并且返回替换后的字符串,
如果为函数,则该函数应该只接收一个Match对象,并且返回一个字符串用于替换,
count用于指定替换次数。
"""
# egg_001: repl为字符串
test_str = "aaaa bbbb cccc,dddd;eeee"
pattern = re.compile(r"[,;s]+")
repl_str = "&"
matcher = pattern.sub( repl_str, test_str)
print(matcher) # aaaa&bbbb&cccc&dddd&eeee
# egg_002: repl为函数,设置次数为3
test_str = "aaaa bbbb cccc,dddd;eeee"
pattern = re.compile(r"[,;s]+")
def func(m):
print("m:", m)
return "*"
matcher = pattern.sub(func, test_str, 3)
print(matcher) # aaaa*bbbb*cccc*dddd;eeee
7.subn方法讲解
该方法也是用于替换,说明:返回一个元组,元组有两个元素,
第一个和使用sub方法返回的结果一致,另一个表示替换的次数。
import re
"""
subn(repl, string, count=0)
说明:该方法也是用于替换,返回一个元组,元组有两个元素,
第一个和使用sub方法返回的结果一致,另一个表示替换的次数。
"""
# egg_001: repl为字符串
test_str = "aaaa bbbb cccc,dddd;eeee"
pattern = re.compile(r"[,;s]+")
repl_str = "&"
matcher = pattern.subn(repl_str, test_str)
print(matcher) # ('aaaa&bbbb&cccc&dddd&eeee', 4)
# egg_002: repl为函数,设置次数为3
test_str = "aaaa bbbb cccc,dddd;eeee"
pattern = re.compile(r"[,;s]+")
def func(m):
print("m:", m)
return "*"
matcher = pattern.subn(func, test_str, 3)
print(matcher) # ('aaaa*bbbb*cccc*dddd;eeee', 3)
以上是python关于正则表达式的讲解之二,后续会继续更新正则表达式的经典使用案例,有疑问的欢迎评论或私信博主啊。



