正则表达式

特殊符号

空格   
>    >
<    &lt;
&    &amp;
¥    &yen;
版权  &copy;
注册  &reg;

常用标签

<a href="https://www.sogo.com">链接标签</a>
href参数后面写网址 用户点击即可跳转到该网页

<img src="111.png" alt="">图片标签
src参数后面写图片的地址 可以是网络上的也可以是本地的

<div>页面布局标签</div>
是所有网页中出现频率最高的标签 内部可以无限制的嵌套任意标签

<span>页面文本标签</span>
是所有网页中涉及到文字可能会出现的标签 频率并不是太高

列表标签

<ul>
  <li>001</li>
  <li>002</li>
  <li>003</li>
  <li>004</li>
  <li>005</li>
</ul>
"""在网页上看似有规则排列的横向或者竖向的内容基本都是用列表标签完成的"""

表格标签

'''涉及到多条相同格式数据展示的时候可以考虑使用表格标签(类似于excel)'''
<table>
  <thead>
    <tr>
      <th>序号</th> <!--书写一个个字段名-->
      <th>姓名</th>
      <th>年龄</th>
    </tr> <!--一个tr就是一行-->
  </thead> <!--书写表头数据(字段名)-->
  <tbody>
    <tr>
      <td>1</td> <!--书写一个个真实数据-->
      <td>jason</td>
      <td>123</td>
    </tr>
  </tbody> <!--书写表单数据(真实数据)-->
</table>

表单标签

"""涉及到用户数据的获取一般都需要使用表单标签"""
input标签
  type参数
    text 普通文本
    password 密文展示
    email 邮箱格式
    date 日期格式
    radio 单选
    checkbox 多选
    file 文件
    submit 提交按钮
    reset 重置按钮
    button 普通按钮
select标签
  option子标签
textarea标签
  获取大段文本

标签特性(重要)

<a id='' class=''></a>
上述id、class等都称之为a标签的属性
"""标签两大核心属性"""
  id # 单独查找某个人
    类似于标签的身份证号码 用于唯一标识标签
    在同一个html文档中id不能重复
  class # 批量查找一群人
    类似于标签的种群(类别) 用于区分不同的类
    在用一个html文档中class值可以重复 表示属于同一个类别
      eg:
        <p class='c1'></p>
        <a class='c1'></a>
        <div class='c1'></div>
    一个标签可以含有多个class值
        <span class='c1 c2 c3'></span>
"""标签还可以自定义任意的属性"""
  <a username='jason' pwd=123></a>


"""标签之间的关系描述"""
<div>只要是div内部的标签都可以称之为是div的后代
  <a>上一级div的儿子</a>
  <p>上一级div的儿
    <span>上一级p的儿上上一级div的孙子</span>
  </p>
  <div>上一级div的儿
    <a>上一级div的儿子上上一级div的孙子</a>
  </div>
  <span>上一级div的儿</span>
</div>

正则表达式

# 前戏
  '''纯python代码实现数据校验'''
  # 1.获取用户手机号
  phone = input('phone num>>>:').strip()
  # 2.先判断长度是否是11位
  if len(phone) == 11:
    # 3.再判断是否是纯数字
    if phone.isdigit():
      # 4.最后判断开头是否是13 14 15 18
      if phone.startswith('13') or phone.startswith('14') or phone.startswith('15') or phone.startswith('18'):
        print('是一个合法的手机号')
      else:
        print('手机号格式错误')
    else:
      print('手机号必须是纯数字')
  else:
    print('手机号必须是11位')
  '''借助于正则表达式校验'''
  import re
  phone_number = input('please input your phone number : ')
  if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):
    print('是合法的手机号码')
  else:
    print('不是合法的手机号码')
# 使用正则表达式可以极大的简化数据筛选和校验的步骤


"""
有时候匹配的内容很精确的情况下可以直接写具体内容
  eg:
    待匹配的文本内容 jasonkevinjasontonyegonjack
    要匹配的文本 jason
    正则表达式直接写jason即可
"""

正则表达式之字符组

# 字符组在匹配内容的时候是单个单个字符挨个匹配
  [0123456789] 匹配0到9之间的任意一个数字包括首尾
  [0-9] 简写:匹配0到9之间的任意一个数字包括首尾
  [a-z] 匹配小写字母a到z之间的任意一个字母包括首尾
  [A-Z] 匹配大写字母A到Z之间的任意一个字母包括首尾
  [0-9a-zA-Z] 匹配数字或者小写字母或者大写字母

正则表达式之符号

# 符号在匹配内容的时候是单个单个字符挨个匹配
.    匹配除换行符以外的任意字符
\d    匹配数字
^    匹配字符串的开始
$    匹配字符串的结尾
a|b    匹配字符a或字符b
()    给正则表达式分组 本身没有任何意义
[...]    匹配字符组中的字符
[^...]    匹配除了字符组中字符的所有字符(取反)

正则表达式之量词

# 跟在正则表达式的后面可以一次性匹配多个字符
'''量词必须跟在正则表达式后面 不能单独出现使用'''
*    重复零次或更多次
+    重复一次或更多次
?    重复零次或一次
{n}    重复n次
{n,}    重复n次或更多次
{n,m}    重复n到m次

"""正则表达式默认情况下都是贪婪匹配>>>:尽可能多的匹配"""
正则 待匹配的文本 结果
海.    海燕海娇海东  三个结果 海燕、海娇、海东
^海.    海燕海娇海东  一个结果 海燕
海.$    海燕海娇海东  一个结果 海东
海.*    海燕海娇海东  一个结果 海燕海娇海东

练习题

李.?  李杰和李莲英和李二棍子  李杰
                  李莲
                  李二
# 问号表示零次或一次 默认贪婪即一次 其实就是正则表达式本身的一次

李.*  李杰和李莲英和李二棍子  李杰和李莲英和李二棍子
李.+  李杰和李莲英和李二棍子  李杰和李莲英和李二棍子
李.{1,2}  李杰和李莲英和李二棍子  李杰和 李莲英 李二棍


"""贪婪匹配与非贪婪匹配"""
<.*>  <script>123</script>  <script>123</script>
右侧尽可能多的匹配大括号最后一个才停止
# 将贪婪匹配变成非贪婪匹配只需要在量词后面加一个问号即可
<.*?>  <script>123</script>
  右侧遇到一个大括号就停止匹配

取消转义

\n  匹配的是换行符
\\n  匹配的是\n
\\\\n  匹配的是\\n

re模块

# 如果想在python代码中使用正则表达式需要借助于内置模块re
  import re
  text = '<script>123</script>'
  res = re.findall('<.*?>',text)
  print(res)

posted @ 2021-09-14 22:10  雾雨黑白  阅读(37)  评论(0编辑  收藏  举报