re:
- 介绍:关于正则表达式的模块
- 正则表达式字符:
匹配
*
号前的字符
0
次或多次
更多:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin
常用可选标志位:
re.S: 使 . 匹配包括换行在内的所有字符
re.I: 匹配忽略大小写
如果想同时使用多个标志位,需要使用|:
group与groups:
match和search匹配的返回结果都是对象,如果要获取对应字符串,需要使用group(num) 或 groups() :
group(num=0):
直接调用则返回整个匹配结果,
如果group里面有参数:group(0)代表整个匹配结果,group(1) 列出第一个分组匹配部分,group(2) 列出第二个分组匹配部分,group(3) 列出第三个分组匹配部分,以此类推。
groups()
以元组返回所有分组匹配的字符
附加:
-
start([group])
方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0; end([group])
方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;span([group])
方法返回(start(group), end(group))
。
re.match(pattern, string, flags=0):
功能:re.match 从头开始匹配,如果字符串开头不匹配,那么返回None【如果匹配模式是】
参数介绍:
- pattern:匹配的正则表达式
- string:要匹配的字符串。
- flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
re.search(pattern, string, flags=0):
功能:re.search 搜索整个字符串,返回第一个匹配结果
参数介绍:
pattern:匹配的正则表达式
string:要匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式
re.sub(pattern, repl, string, count=0, flags=0):
功能:re.sub 用于替换字符串中的匹配项,可指定替换个数
参数介绍:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
用法:
import re print(re.sub("abc","ABC","123abc123"))#123ABC123 print(re.sub("abc","ABC","123abc123abc123abc",2))#123ABC123ABC123abc print(re.sub("abc","ABC","123abc123abc123abc",2))#123ABC123ABC123abc def func(x): x=int(x.group())+1 return str(x) print(re.sub("123",lambda x:str(int(x.group())+1),"123abc123"))#124abc124 print(re.sub("123",func,"123abc123"))#124abc124
re.findall(string[, pos[, endpos]]):
功能:re.findall 搜索整个字符串,把所有匹配到的字符串以列表中的元素返回
参数介绍:
- string : 待匹配的字符串。
- pos : 可选参数,指定字符串的起始位置,默认为 0。
- endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
用法:
re.compile 函数
- compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象
- 注:只能由 match() 和 search() 这两个函数使用。
import re print(".".center(50,‘-‘)) print(re.match(".","abc"))#<_sre.SRE_Match object; span=(0, 1), match=‘a‘> print(re.match(".","abc").group())# a print(re.match(".","abc").groups())# a print("+".center(50,‘-‘)) print(re.match("a+","aaaa").group())#aaaa print("?".center(50,‘-‘)) print(re.match("a?","aaaa").group())#a print("*".center(50,‘-‘)) print(re.match("a*","aaaa").group())#aaaa print("^".center(50,‘-‘)) print(re.search("^a.b","acbd").group())#acb print(re.match("^a.+","abc").group()) print(re.search("^a.b","123acbd"))#这样找不到 print(re.search("a.+d$","acbd").group())#acbd print(re.search("a.+d$","acbdc"))#这样找不到 print("".center(50,‘-‘)) print("\d".center(50,‘-‘)) print(re.match("\d","123456").group())#1 print(re.match("\d+","123456").group())#123456 print("\D".center(50,‘-‘)) print(re.search("\D","123456b").group())#b print(re.search("\D","a123456").group())#a print("\s".center(50,‘-‘)) print(re.search("a\sb","123a b456").group())#a b print("[]".center(50,‘-‘)) print(re.search("[a-z]+","abcdefg").group())#abcdefg print(re.search("[a-k]+","abczefg").group())#abc print(re.search("[0-9]+","123456").group())#123456 print(re.search("[0-4]+","123456").group())#1234 print(re.search("[a-zA-Z0-9]+","1a2bC456ef").group())#1a2bC456ef print("".center(50,‘-‘)) print(re.search("[a-z]+|[A-Z]+","1ab2bC4ef").group())#ab print(re.search("([a-z]|[A-Z])+","1ab2bC4ef").group())#ab print("{n}{n,m}".center(50,‘-‘)) print(re.search("[a-z]{3}","1ab2bC4efg").group())#efg print(re.search("[a-z]{2,3}","1ab2bC4efg").group())#ab print(re.search("[a-z]{2,3}","1a2C4efg").group())#efg print(re.search("[a-z]{2,}","1a2C4efgaaaa").group())#efgaaaa print("分组匹配".center(50,‘-‘)) print(re.search("([a-z]|[A-Z])+","1ab2bC4ef").group())#ab print(re.search("([a-z]|[A-Z])+","1ab2bC4ef").group())#ab print("group groups".center(50,‘-‘)) print(re.search("(\d[a-z]\d){3}","1x11a32a465").group())#1x11a32a4 print(re.search("(abc){3}","abcabcabc123").group())#abcabcabc print(re.search("(abc)","abcabcabc123").groups())#(‘abc‘,) m=re.search("(abc)(cba)(def)","abccbadef123") print(m.groups())#(‘abc‘, ‘cba‘, ‘def‘) print(m.group(0))#abccbadef print(m.group(1))#abc print(m.group(2))#cba print("findall".center(50,‘-‘)) print(re.findall("(abc)","abcabcabc123"))#[‘abc‘, ‘abc‘, ‘abc‘] print("flag".center(50,‘-‘)) print(re.search("a.b","a\nb",re.S).group())#分两行打印的 a b print(re.search("a.b","A\nb",re.S|re.I).group())#分两行打印的 A b print(re.search("ab","Ab",re.I).group())#Ab