正则表达式和re模块

2021/6/25 23:27:40

本文主要是介绍正则表达式和re模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

# 什么是正则表达式
    # 一套规范 - 匹配字符串的规则

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

# 正则规则
# 所有的规则中的字符就可以刚好匹配到字符串中的内容
# 字符组 [] 描述的是一个位置上能出现的所有可能性
  # 接受范围,可以描述多个范围,连着写就可以了
  # [abc] 匹配a或b或c中的任意一个字符一次,一个字符组只表示一个位置
  # [0-9]  根据Ascii进行范围的对比
  # [A-Z]
  # [a-z]
  # [a-zA-Z] 把范围大的写在前面,表示匹配大小写字母
  # [0-9a-zA-Z] 表示匹配数字或大小写字母
# 在正则表达式中你能够帮助我们表示匹配的内容的符号都是正则中的 元字符
# [0-9]  --> \d 表示匹配一位数字 digit
# [0-9a-zA-Z——]  --> \w 表示匹配数字|字母|下划线
# 空格 -->
# tab --> \t
# enter --> \n
# 空格,tab,回车 --> \s 表示匹配所有空白 包括空格,tab 和回车

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





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

# 量词
# {n}  表示匹配n次
# {n,}  表示匹配至少n次
# {n,m}  表示匹配n到m次
# ? --> {0,1} 表示匹配0到1次
# + --> {1,}  表示匹配至少1次
# * --> {0,}  表示匹配任意次


# 整数[1-9]\d*
# 小数\d+\.\d+
# 整数\d+(\.\d)?\d*

# 分组的作用

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

# 判断用户输入的内容是否合法,如果用户输入对就能查到结果,iguana输入的不对就不能查到结果
# ^1[3-9]\d{9}$

# 从一个大文件中查找到所以符合规则的内容
# 1[3-9]\d{9}
# 回溯
# 1\d+6 
# 这是一个贪婪匹配,先找到1开头的在如果后面是数字就一直匹配直到匹配到一个非数字才停止
# 然后在往回找6这就叫回溯

# 贪婪匹配 
  # 在量词范围允许的情况下多匹配
  # 1\d?3
  # 1\d{1,3}3

# 非贪婪(惰性)匹配
  # .*?x 表示匹配任意字符任意次数,但是遇到x就停下来
  # .*x  表示匹配任意字符任意次数,直到匹配到最后一个x才停下来 (贪婪)
  # 1\d??3
  # 1\d{1,3}?3
# 在量词后面加一个?代表非贪婪(惰性)匹配
# 元字符 量词 ?
# \d{3,}?6

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


# 18/15 位的身份证
# 15
    # 1-9 14
    # [1-9]\d{14}
# 18
    # 1-9 16 0-9/x
    # [1-9]\d[16][0-9x]


#^([1-9]\d{16}[0-9x] | [1-9]\d{14})$




import re
ret = re.findall('\d+','123sald123')
print('ret')
if ret:
  print(ret.group())
ret_s = re.seach('123','anc123asd123l123')
















  














这篇关于正则表达式和re模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程