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, s, S 依赖于当前环境,不推荐使用
re.U(UNICODE) 使用w W s S d D使用取决于unicode定义的字符属性。在python3中默认使用该flag
re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
"""
原文地址:https://www.cnblogs.com/zxc-Weblog/p/8259534.html