正则模块
# 正则模块re import re # re.match(r"正则表达式",要匹配的数据) # r 原生的 防止转义 # 获取匹配值的语法格式:ret.group() 报错说明没有匹配成功的数据
元字符
# . (点):匹配出\n以外的所有字符 # \d:匹配数字0-9之间的任意一个 # \D: 匹配除数字以外的任意一个字符 中文 字母 特殊符号 # \w: 匹配 数字 字母 下划线 (中文也可以) # \W: 匹配除 数字 字母 下划线 中文 以外的其余字符 # \s: 匹配空白符 \n 空格 # \S: 匹配非空白符 # []:字符集 # [1-47-9]:匹配不连续的数字 1-47-9 1 2 3 4 7 8 9 # [a-d]:匹配小写字母a-d a b c d # [a-dg-k]:匹配不连续小写字母a-dg-h a b c d g h i j k # [0-9a-zA-Z_]:匹配数字字母下划线 # ^: 匹配到字符串开头 # $: 匹配到字符串结尾 整个字符串都满足条件才可以
量词
+:匹配+号前字符 1次或无数次 至少一次 *:匹配*号前字符 0次或无数次 可有可无 ?:匹配?号前字符 0次或1次 {m,n}:匹配m次到n次 {m}:匹配m次 {m,}:匹配最少m次 {,n}:匹配最多n次
分组与或
# |:或者 # ():分组,将()里的字符组成一个分组例:用正则匹配邮箱 6-20 @qq.com @163.com @sina.com
re.match(r"^[a-zA-Z0-9_]{6,20}@(qq|163|sina)\.(com|cn)$", Email)这里 (qq|163|sina) 是一个分组 代表可以匹配 该分组中 其中一个即可
re接口模块
match方法
re.match()
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
语法:re.match(pattern, string, flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
search方法
re.search() 扫描整个字符串并返回第一个成功的匹配。匹配成功re.search方法返回一个匹配的对象,否则返回None。
函数语法: re.search(pattern, string, flags=0)
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 描述 group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号
例:
# 导包 import re # 使用re模块中的match(正则表达式,要匹配的字符串对象)方法进行匹配 ret = re.match("abc","abcdef") if ret: # 判断匹配结果是否存在 print(ret.group()) else: print("匹配失败")
同样 re.search()也可以使用
注意: match 和 search 是匹配一次 findall 匹配所有。
findall方法
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
1.pattern.findall(string,pos,endpos)
string : 待匹配的字符串。
pos : 可选参数,指定字符串的起始位置,默认为 0。
endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
语法示例:
import re
pattern = re.compile(r'\d+') # 查找数字
result2 = pattern.findall('run88oob123google456', 0, 10)
可以指定查找范围
2,re.findall()
语法:re.finadll(pattern,string,flags=0)
使用该方法则无法 指定匹配的区间了