大家好,偷学Python系列是由小甜同学从初学者的角度学习Python的笔记,其特点就是全文大多由新手易理解代码与注释及动态演示。刚入门的读者千万不要错过!

在前天我们详细讲解了Python正则表达式相关知识点。那么本文带来的是偷学Python第三十二天:Python正则表达式的运用(附超有用的小项目练习),其他内容将在近期更新完毕。

假装有个标题


昨天将Python中的正则表达式给学习完了,正则表达式在爬虫中是灰常灰常有用的一个工具,因为爬出来的信息多而杂乱,正则表达式和re模块就可以很好的帮助我们来完成这些杂乱信息的分类和处理。


今天就来练习一下正则表达式的应用,然后整理一些常用的正则表达式


电话号码和E-mail地址的提取程序


假如需要在一大篇文章中提取出里面的电话号码和邮箱地址,如果手动的找不仅浪费时间而且还容易漏掉,这个时候就需要编写一个这样的小程序来完成这项任务!


第一步:创建一个匹配电话号码的正则对象

# 正则表达式的样式编译为一个正则对象,使用re.X添加注释
phone_regex = re.compile(r"""(0\d{2,3}|\(\d{2,3}\) # 匹配电话号码的开头
([\s-\.])? # 匹配中间的分隔符
(\d{7,8})
)"""
, re.X)

第二步:创建一个匹配邮箱地址的正则对象(论对象的重要性)

# 第二步穿件检测邮箱的正则
email_regex = re.compile(r"""([a-zA-Z0-9/_%+-]+ # 匹配用户名
@\w+ # 例如:@qq,@193等等
\.[a-zA-Z]{2,4} # 匹配最后一部分
)"""
, re.X)

第三步:定义一个查找电话号的函数

# 第三步定义一个查找电话号的函数
def phone(file_name):
    with open(file_name, encoding="utf8"as file1:  # 打开文件命名
        file_str = file1.read()  # 读取文件内容
        phone_content = phone_regex.findall(file_str)  # 查找内容
    return phone_content

第四步:定义一个打开查找邮箱的函数

# 第四步定义一个打开查找邮箱的函数
def email(file_name):
    with open(file_name, encoding="utf8"as file1:  # 打开文件命名
        file_str = file1.read()  # 读取文件内容
        email_content = email_regex.findall(file_str)  # 查找内容
    return email_content

最后一步:将文本内容写入一个文件

# 最后一步将结果写入一个文件
# 测试函数
phones = phone("text.txt")
emails = email("text.txt")
# print(phone)
# print(email)

with open("content.txt", mode="a+", encoding="utf8"as file:  # 使用with...as打开文件可以自动关闭
    file.write("-------电话-------\n")
    for phone in phones:
        file.write(phone)
        file.write("\n")  # 手动加入一个换行
    file.write("-------邮箱-------\n")
    for email in emails:
        file.write(email)
        file.write("\n")

到这里就写完了,来测试一下,我随便复制了点东西,然后在里面随便加了点邮箱,电话(国内电话,非手机号)

总之就是非常的乱,主要看结果,使用上面的代码最终结果如下:

反正最后的结果很是完美。

PS:上面用到的信息纯属虚构

再来一个简单的案例


输入QQ号判断是否符合标准

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/31
"""

import re
pattern = r"^[1-9]\d{4,9}$"
while True:
    qq = input("请输入QQ:")
    qq_match = re.match(pattern, qq)
    if qq_match:
        print("QQ无误")
        break
    else:
        print("QQ输入有误")
        break

常用的正则表达式


下面是小甜给大家整理的一些常用的正则表达式,拿走就能用!

正则表达式含义
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$邮箱地址
((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))IPV4地址
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))IPV6地址
https?\:\/\/[\S]+URL
[一-龥]+匹配所有汉字
^-?([1-9]\d*|0)(\.\d{1,2})?$金额
(?<=^|[\s])([一-龥])([一-龥])(?=$|[\s])两个字的姓名
(?<=^|[\s])([一-龥])([一-龥])(?=$|[\[^\\]+$路径中提取文件
(?<=^|[\s])([一-龥])([一-龥]^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$密码验证
(?<=abc|^)((?!abc).)+排除字符串
^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$日期
(^[1-9]\d{7}((0\d)|(1[0-2]))(([012]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}(?:(?:0\d)|(?:1[0-2]))(?:(?:[012]\d)|3[0-1])\d{3}(?:[\d]|X)$)身份证
^(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])$时间(时:分)
^(([1-9]{1})|([0-1][0-9])[^\((?<=\/\/www\.)[^\/\:]+|(?<=\/\/)(?!www\.)[^\/\:]+)网址中提取域名
^[a-zA-Z]\:(\\[^\\\/\:\*\?\"\<\>\|]+)*\\?$路径
#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})颜色代码
后面的内容纯属让这个表格看起来更容易一点,不过有一句实话,(。◕ˇ∀ˇ◕)哈哈,又自恋了占位占位占位占位

甜甜有话说


用了32天终于把Python中的基础知识给拿下了!接下来会用一周的时间完成2-3个的结课项目,之后将开始学习爬虫,并更新《甜甜爬全网》系列,一周更新2-3篇,但对我来说毕竟是新内容加难内容,速度肯定不会太快!


©著作权归作者所有:来自51CTO博客作者mb5fe18e32e4691的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 面试官最爱问你的,网络分层中每一层有哪些内容
  2. Python办公自动化|批量处理文件,一学就会
  3. JDBC自定义工具类(properties配置文件方式)
  4. Jar 文件(学习 Java 编程语言 037)
  5. 详解 centos7设置nfs文件共享 实操记录
  6. 关于PHP框架中.env文件的加载过程
  7. PHP识别文件伪装(文件上传)
  8. PHP作用域和文件夹操作示例
  9. PHP生成器-动态生成内容的数组

随机推荐

  1. 关于屏幕解锁的实例
  2. Android 隐藏系统状态栏和标题栏
  3. Android(安卓)AsyncTask
  4. IDEA Android studio toString() 生成Jso
  5. Android 数据绑定(Data Binding)详解
  6. SDK/ADT历史版本
  7. Google API应用
  8. android 禁止横竖版切换
  9. android 从横屏到竖屏状态出现黑屏
  10. Android 改变AlertDialog的大小