1 基础匹配用法
# 演示Python中正则表达式re模块的3个基础匹配方法
import re
# 1. match()方法 从头匹配
string = "hello world"
result = re.match("hello", string) # 如果头部没有匹配成功就直接失败了,后面就不会继续匹配了
print(result)
print(result.group())
print(result.span())
print("--------------------")# 2. search()方法 搜索匹配
s1 = "python11888999python"
result = re.search("python", s1) # 搜索整个字符串,找到第一个匹配的,并返回结果
print(result)
print(result.group())
print(result.span())
print("----------------------")# 3. findall()方法 搜索匹配所有,返回一个列表
s2 = "python11888999python"
result = re.findall("python", s2)
print(result)
print("--------------------")
2 元字符匹配
"""字符 功能. 匹配任意1个字符(除了\n), \. 匹配点本身[...] 匹配[]中列举的字符, 字符集合, [0-9a-zA-Z_], [a-z], [0-9], [...]\d 匹配数字, [0-9]的简写\D 匹配非数字, [^0-9]的简写\w 匹配字母或数字或下划线, [a-zA-Z0-9_]的简写\W 匹配非(字母或数字或下划线), [^a-zA-Z0-9_]的简写\s 匹配空白, [ \t\n\x0b\r]的简写, 即空格, tab键\S 匹配非空白, [^ \t\n\x0b\r]的简写[^...] 匹配除了[]中列举的字符之外的字符, 反向字符集合, [^0-9], [^a-zA-Z_]
"""import re
s = "itheima @@ Python2 !!999 # It"
result = re.findall(r"\d", s) # 加上 r 可以表示字符串中的转义字符无效
print(result)
print("---------------------")result2 = re.findall(r"\W", s) # 非单词字符
print(result2)
print("---------------------")# 匹配所有的英文字母
result3 = re.findall(r"[a-zA-Z]", s)
print(result3)"""数量匹配:* 匹配*号 前的字符 0次或无数次+ 匹配+号 前的字符 1次或无数次? 匹配?号 前的字符 0次或1次{m} 匹配{m} 前的字符 出现m次{m,} 匹配{m} 前的字符 出现最少m次{m,n} 匹配{m,n} 前的字符 出现 m到n次
""""""边界匹配:^ 匹配一行字符串的开头$ 匹配一行字符串的结束\b 匹配一个单词的边界\B 匹配非单词边界
""""""分组匹配:| 匹配左右任意一个表达式(...) 分组, 将 ()中的内容作为一组, (abc.efs), (a|b|c)
"""# 案例: (注意: 正则表达式中千万不要随意价格空格)
# 1. 匹配账号: 只能由字母数字组成,长度限制6-10位
r = '^[a-zA-Z0-9]{6,10}$'
s = '1232dfgf'
result = re.findall(r, s)
print(result)
print('---------------------')# 2. 匹配QQ号, 要求纯数字, 长度5-11,第一位不为0
r = '^[1-9][0-9]{4,10}$' # {4,10} 开头已经占了一位了
s_qq = '329809378'
result_qq = re.findall(r, s_qq)
print(result_qq)
print('---------------------')# 3. 匹配邮箱地址,只允许请qq 、163、gmail这三种邮箱地址
# abc.ghs.edu@qq.com
# abc.ghs.edu@qq.jsx.ss.com
# abc.@163.com
r = '^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$'
s = 'abc.ghs.edu@qq.com'
result = re.findall(r, s) # findall 会返回正则中的分组 () -> [('.edu', 'qq', '.com')]
# 所以需要整体再放入一个组中
r = '(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
result_all = re.findall(r, s)
result_match = re.match(r, s)
print(result_match)
print(result_all)
print("----------------------")