python----正则表达式

# 什么是正则表达式
    # 一套规则 - 匹配字符串的
# 能做什么
    # 1.检测一个输入的字符串是否合法  -- web开发项目 表单验证
        # 用户输入一个内容的时候,我们要提前做检测
        # 能够提高程序的效率并且减轻服务器的压力
    # 2.从一个大文件中找到所有符合规则的内容 -- 日志分析\爬虫
        # 能够高效的从一大段文字中快速找到符合规则的内容

# 正则规则
# 所有的规则中的字符就可以刚好匹配到字符串中的内容
# 字符组 描述的是一个位置上能出现的所有可能性
    # 接受范围,可以描述多个范围,连着写就可以了
    # [abc]   一个中括号只表示一个字符位置
    # 匹配a或者b或者c
    # [0-9]   根据ascii进行范围的比对
    # [a-z]
    # [A-Z]

    # [a-zA-Z] 大小写
    # [0-9a-z]
    # [0-9a-zA-Z_]

# 在正则表达式中能够帮助我们表示匹配的内容的符号都是正则中的 元字符
# [0-9]        -->  \d   表示匹配一位任意数字 digit
# [0-9a-zA-Z_] -->  \w   表示匹配数字字母下划线 word
# 空格 -->
# tab  -->  \t
# enter回车  -->  \n
# 空格,tab和回车 --> \s  表示所有空白 包括空格 tab和回车

# 元字符 -- 匹配内容的规则
# []  [^]
# \d
# \w
# \s
# \t
# \n
# \W  非数字字母下划线
# \D  非数字
# \S  非空白
# [\d]  \d
# [\d\D] [\w\W] [\s\S]  表示匹配所有
# .   匹配除了换行符之外的所有
# [^\d]  匹配所有的非数字
# [^1]  匹配所有的非数字
# ^     匹配一个字符串的开始
# $     匹配一个字符串的结尾
# a表达式|b表达式     匹配a或者b表达式中的内容,如果匹配a成功了,不会继续和b匹配
#                       所以,如果两个规则有重叠部分,总是把长的放在前面
# ()    # 约束 | 描述的内容的范围问题

# www\.oldboy\.com|www\.baidu\.com|www\.jd\.com|www\.taobao\.com
# www\.(oldboy|baidu|jd|taobao)\.com


# 记忆元字符 : 都是表示能匹配哪些内容,一个元字符总是表示一个字符位置上的内容
    # \d \w \s \t \n \D \W \S
    # [] [^] .
    # ^ $
    # | ()

# 量词
    # {n}  表示匹配n次
    # {n,} 表示匹配至少n次
    # {n,m}表示至少匹配n次,至多m次
    # ? 表示匹配0次或1次 {0,1}
    # + 表示1次或多次    {1,}
    # * 表示0次或多次    {0,}

# 匹配0次
    # 整数 \d+
    # 小数 \d+\.\d+
    # 整数或小数 : \d+\.?\d*

    # 分组的作用 : \d+(\.\d+)?

# 手机号码
    # 1 3-9 11位
    # 1[3-9]\d{9}

# 判断用户输入的内容是否合法,如果用户输入的对就能查到结果,如果输入的不对就不能查到结果
    # ^1[3-9]\d{9}$
# 从一个大文件中找到所有符合规则的内容
    # 1[3-9]\d{9}

# 贪婪匹配
    # 在量词范围允许的情况下,尽量多的匹配内容
    # .*x  表示匹配任意字符 任意多次数 遇到最后一个x才停下来
# 非贪婪(惰性)匹配
    # .*?x  表示匹配任意字符 任意多次数 但是一旦遇到x就停下来

# 转义符
    # 原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
    # 有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义
        # [().*+?] 所有的内容在字符组中会取消它的特殊意义
        # [a\-c]  -在字符组中表示范围,如果不希望它表示范围,需要转义,或者放在字符组的最前面\最后面

 

 

# 元字符
    # \d \s \w \t \n \D \S \W
    # [] [^] .
    # ^ $
    # () |
# 量词
    # {}  表示任意的次数,任意的次数范围,至少多少次
    # ? + *
# 贪婪和非贪婪匹配
    # 总是在量词范围内尽量多匹配 - 贪婪
    # 总是在量词范围内尽量少匹配 - 惰性
    # .*?x  匹配任意内容任意次数 遇到x就停止
    # .+?x  匹配任意内容至少1次 遇到x就停止
# 转义符问题
    # . 有特殊的意义,取消特殊的意义\.
    # 取消一个元字符的特殊意义有两种方法
        # 在这个元字符前面加\
        # 对一部分字符生效,把这个元字符放在字符组里
            # [.()+?*]

# 18/15位的身份证号
    # 15
        # 1-9 15
        # [1-9]\d{14}
    # 18
        # 1-9 16 0-9/x
        # [1-9]\d{16}[\dx]
        # [1-9]\d{16}[0-9x]
#[1-9]\d{16}[0-9x]|[1-9]\d{14}
# ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
# [1-9]\d{14}(\d{2}[\dx])?
# ^[1-9]\d{14}(\d{2}[\dx])?$

 

总结:
# 正则表达式
    # 元字符
        # \d \w \s \t \n \D \W \S
        # . [] [^]   ^ $
        # | ()
    # 量词
        # ? + *
        # {n} {n,} {n,m}
    # 贪婪与非贪婪
        # 默认贪婪
        # 量词?
    # 转义符
        # 如果有特殊意义 \元字符能够取消这个元字符的特殊含义
        # 表示只匹配\后面的原本的内容
        # [.*+?()]
# re模块
    # findall
        # 会优先显示分组内的内容
        # 取消优先显示(?:正则)
    # search
        # 只能返回第一个符合条件的项
        # 得到的结果需要.group取值
        # 默认获取完整的匹配结果
        # 通过group(n)取第n个分组中的内容

# a开头由至少一个字母组成的字符串
# ^a[a-zA-Z]*
# ^a.*

# 以1开头,中间3-5位数字,x结尾,中间的值不能超过5位
# 超过5位整个字符串都不能匹配
# 1\d{3,5}x

# 以1开头,中间3-5位数字,x结尾,中间的值不能超过5位
# 超过5位整个字符串都不能匹配
# ^1\d{3,5}$

#

 

posted @ 2020-06-15 09:12  水晶冰洛  阅读(157)  评论(0编辑  收藏  举报