Python进阶知识:整理6 -> 正则表达式

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("--------------------")

Python进阶知识:整理6 -> 正则表达式_第1张图片

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这三种邮箱地址
# [email protected]
# [email protected]
# [email protected]
r = '^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$'
s = '[email protected]'
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("----------------------")

你可能感兴趣的:(Python,python)