学习正则表达式——Python语言

正则表达式

什么是正则表达式

一套规则——匹配字符串

能做什么

1.检测一个输入的字符串是否合法——web开发 表单验证

  • 用户输入一个内容的时候,我们要提前做检测
  • 能够提高程序的效率并且减轻服务器的压力

2.从一个大文件中找到所有符合规则的内容——日志分析\爬虫

  • 能够高效的从一大段文字中快速找到符合条件的内容
正则规则

所有的规则中的字符就可以刚好匹配到字符串中的内容

  • 固定匹配 , 直接用引号 ’‘ ,内部的内容即为必须匹配上的
  • 将文本中符合匹配到的第一个字符串

【abc】表示 匹配a或者b或者c

【0-9】表示匹配0123456789的任意一个数字

根据ascii进行范围的比对

元字符

在正则表达式中能够帮助我们表示匹配的内容的符号

都叫正则中的元字符

  • [] 表示仅匹配框中的一个内容,

  • [123] -> 匹配1或2或3

  • [-] -> 一般用于表示区间范围,如下

  • [0-9] -> \d 表示匹配任意数字

  • [a-zA-Z] -> 表示匹配大小写

  • [0-9a-zA-z_] -> \w 表示匹配数字字母下划线

  • ‘q[34]’ -> 表示匹配q3或q4

  • 空白键(空格\tab\enter) -> ( \t\n) -> \s 匹配所有空白

  • \W -> 非数字字母下划线

  • \D -> 非数字

  • \S -> 非空白

  • [\d\D] -> 表示匹配所有 同理[\w\W]等

  • . -> 通配符 匹配除了 换行符外 的所有

  • [^] 非字符,必须写在第一个位置

    例:

    [^\d] -> 表示匹配非数字的字符

  • ^ -> 匹配一个字符串的开始

  • $ -> 匹配一个字符串的结尾

    ^ 与 $ 约束了在这之间所有的内容与位数,

    例:

    ^a. 只能匹配以 a + .任意的字符串, absdfsdf

    a.$ 只能匹配以a + . 的结尾, asdfhkjav

    ^aaa$ :只能匹配一个字符串且必为 aaa

  • \ . -> 表示取消 . 的匹配所有的意义

    用于匹配网站网址 例 www\.baidu\.com

量词

描述同一个规则匹配多少次

注意量词只能跟在元字符后面,并且只能约束前面的一个元字符

{n} 表示必须匹配n次

{n, } 表示至少匹配n次

{n, m} 表示至少匹配n次,最多匹配m次

? 表示匹配0次或1次

+ 表示匹配1次或多次

* 表示匹配0次或多次

举例理解:

整数: \d+

浮点数: \d+.\d+

整数或者小数: \d+\.?\d*

  • 存在缺陷 例如1.也可被匹配上
  • 分组的用法:\d+(\.\d+)?

练习:

  • 匹配手机号码

    1[3-9]\d{9}

  • 判断用户输入的内容是否合法,如果输入的正确就能查到结果,输入不正确就不能查到

    ^1[3-9]\d{9}$

  • 从一个大文件中找到所有符合规则的内容

    1[3-9]\d{9}

分组
  • 划分数据提取区域

    s = 'sfasdf4asdfhjj33'
    
    res = re.findall('df(4\w{6})', s)
    print(res)  # [(4asdfhj)]
    
    # 例:查找所有姓江的人名
    re.findall('(江\w{2, 3})')
    
    s = 'sfasdf4asdfhjj33'
    
    res = re.findall('(df(4\w{6}))', s)
    print(res)  # [('df4asdfhj', '4asdfhj')]
    
    # 例:匹配出生年月日
    s = 'sdasdfasdsdafas20030812'
    res = re.findall('((\d{4})(\d{2})(\d{2}))')
    print(res)  # [('20030812', '2003', '08', '12')]
    
  • 获取指定区域 或 的条件
    - | -> 表示或 ac|bd 可以匹配 ac 可以匹配 bd

    缺陷:ab|abc 就只能匹配 ab

    解决方法:如果匹配的内容有重叠的部分的话,总是把长的内容放在前面 即 abc|ab

()约束某个元字符的作用范围例如 ’|‘ 只在括号内生效
例: www\.(baidu|jd|bilibili)\.com

贪婪匹配

在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

匹配条件为 \d{3, 9}6 匹配 33366222262222

惰性匹配

在量词的后面加上?就变成惰性匹配

\d{3, 9}?6 3336 6222262222

描述:

.*x 表示匹配任意字符,任意多次,遇到最后一个x才停下来

.*?x 表示匹配任意字符,任意多次,一旦遇到x就停下来

转义符
  1. 原本有特殊意义的字符,到了需要表达它本身意义的时候,需要转义

  2. 有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义

    [.()|+?*]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江某指点迷津

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值