python模块之re模块
re模块
通过re模块可以在python中使用正则表达式进行字符串匹配!
导入:import re
常用方法:
findall
import re # findall查找整个字符串找到所有匹配的元素,以列表形式返回 ret = re.findall('z', 'abca') print(ret) # ['a', 'a']
search
# search按顺序查找字符串,找到一个就返回,可以用group()来获取找到的,找不到返回None,返回None时,不能用group(),会报错 ret = re.search('a', 'abca') print(ret.group())
match
# match查找字符串的开头,开头是匹配的就返回,同样使用group()来获取,找不到返回None,返回None时,不能用group(),会报错 ret = re.match('a', 'abca') print(ret.group())
split
# split按顺序找到匹配的字符依次进行分割,返回列表,没有匹配的字符就将整个字符串作为一个列表元素返回 ret = re.split('a', 'abac') print(ret)
sub
# sub按顺序找到匹配的字符,将其替换为指定字符,可以指定替换的个数,没有匹配的就返回原字符串 ret = re.sub('a', 'A', 'abac', 1) print(ret)
subn
# subn找到匹配字符并替换为指定的字符,返回一个元组,第一个元素为替换后的内容,第二个为替换的次数 ret = re.subn('a', 'A', 'abac') print(ret)
compile
# compile将比较长或需要多次使用的正则表达式编译后,方便后面使用。 ret = re.compile('(zxc)') print(ret.findall('zxcsdkfjzxcvskdfj')) print(ret.search('zxcsdkfjzxcvskdfj').group())
finditer
# finditer返回一个存放匹配结果的迭代器,可以通过for循环一个一个取值 ret = re.finditer('\d', 'a1bc3ac4dr') print(ret) # <callable_iterator object at 0x0000019F533BF320> for i in ret: print(i.group())
findall 和 split的优先匹配
ret = re.findall('zxc is (good|bad)', 'zxc is good') # 会返回优先匹配到的结果 print(ret) # ['good'] ret = re.findall('zxc is (?:good|bad)', 'zxc is good') # 通过添加?:取消优先 print(ret) # ['zxc is good'] ret = re.split('(,)', 'zxc,is,good') # 会将()里的匹配内容一起返回 print(ret) # ['zxc', ',', 'is', ',', 'good'] ret = re.split(',', 'zxc,is,good') # 没有(),将只返回分割后的内容 print(ret) # ['zxc', 'is', 'good']
ps:re模块中的几个方法的参数中都有一个默认参数flags,他有几种可选值:
""" re.I(IGNORECASE)忽略大小写,括号内是完整的写法 re.M(MULTILINE)多行模式,改变^和$的行为 re.S(DOTALL)点可以匹配任意字符,包括换行符 re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用 re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释 """