1.正则表达式的介绍
1. 导包 import re 2. 正则校验. re.match(pattern=正则表达式, str, flag) 参1: 正则表达式, 参2: 要校验的字符串, 参3:可选项, 例如: 忽略大小写, 多行模式等. re.search(pattern=正则表达式, str, flag) re.compile(正则表达式).sub(用来替换的内容, 要被替换的内容) 3. 获取匹配结果. result = re.group() 上述函数 介绍: match: 匹配的意思, 从左往右, 逐个字符进行匹配, 不会跳过任意的1个字符, 要求: 全部匹配才行. search: 查找的意思, 从左往右, 从任意的某个字符开始, 只要能匹配上即可. compile:
写法1: re.compile(正则表达式).sub(用来替换的内容, 要被替换的内容)
写法2: 即, 上述格式的语法糖. re.sub(正则表达式, 用来替换的内容, 要被替换的内容)
2.实例
import re
# it.* it + 后续任意内容. result = re.match('it.*', 'sdit123sf')
# search: 查找的意思, 从左往右, 从任意的某个字符开始, 只要能匹配上即可. result = re.search('it.*', 'sdit 123sf')
# 打印结果 if result: # 只要result不是None, 就会走这里. # print(result) # 匹配到的正则对象 print(result.group()) # 从正则中, 获取具体 匹配到的内容. else: # print(result) # None print('未匹配!')
# 需求1: 把字符串中的"敏感词" 给 替换成 * old_str = "车主说: 你的刹车片应该换了啊, 嘿嘿"
# 1. 自定义正则规则. p = r'啊|阿|嘿|呵|哈|啦|嘻|桀' # pattern: 模板(可以理解为: 正则规则), 字符串前加r表示, 取消转移.
# 2. 基于正则规则, 获取正则对象. res = re.compile(pattern=p) # pattern=具体的正则字符串
# 3. 对上述的字符串进行替换. result = res.sub('A', old_str) # 返回的是: 字符串.
# 4. 打印匹配结果. if result: print(f'匹配到: {result}') else: print('未匹配!')
print('-' * 31)
# 需求2: 上述代码的简化版, 语法糖实现 old_str = "故人西辞黄鹤楼, 烟花三月黄鹤楼, 中华虽然好抽, 但是不要上瘾, 抽烟只抽煊赫门, 一生只爱一个人!" # 参1: 正则表达式. # 参2: 用来替换的字符串. # 参3: 要被替换的字符串. result = re.sub('黄鹤楼|中华|煊赫门', '*', old_str) print(result)
3.正则规则
. 代表: 任意的1个字符 \. 取消.的特殊含义, 就是一个普通的. 校验邮箱的时候用, 例如: zhangsan@163.com a 代表: 就是1个普通的字符a [abc] 代表: a,b,c其中的任意1个字符 [^abc] 代表: 除了a,b,c外, 任意的1个字符 \d 代表: 所有的数字, 等价于 [0-9] \D 代表: 所有的非数字, 等价于 [^0-9] \s 代表: 空白字符, \n, 空格, \t等... \S 代表: 非空白字符, 即: 上述取反. \w 代表: 非特殊字符, 即: 字母, 数字, _ 下划线, 汉字 \W 代表: 特殊字符, 即: 上述取反.
^ 代表: 开头 '^[^abc].*' 表示非a,b,c中任意一个字母开口的 $ 代表: 结尾
? 数量词, 至少0次,至多1次 + 数量词, 至少1次, 至多n次 * 数量词, 代表前边的内容, 至少出现 0次, 至多出现 n次 {n} 恰好n次, 多一次少一次都不行. {n,} 至少n次, 至多无所谓 {n,m} 至少n次, 至多m次, 包括n和m
推荐文章
发表评论