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}$ #