想象一下,你需要从一篇100页的报告中找出所有电话号码。传统做法是:眼睛盯着屏幕,手动滚动查找...这种体验你一定不陌生。
正则表达式(Regular Expression,简称regex)就是为解决这类问题而生的文本模式匹配工具。正则表达式是一种用于匹配、查找和操作文本的强大工具,它使用特定的语法规则来描述字符串模式
小明是数据分析师,拿到一份用户数据,里面有各种格式的电话号码:
138-0013-8000
(138)00138000
138 0013 8000
13800138000
他需要统一格式。用正则表达式,一行代码就能搞定所有格式的识别和转换!
小红的服务器每天产生10GB日志,她需要快速找出所有错误信息。用正则匹配错误代码模式,1分钟就能完成人工需要几小时的工作。新媒体运营小李要批量提取文章中的所有超链接,手动复制粘贴?不!正则表达式一键提取所有URL。掌握正则表达式,能让我们的工作大大提效!
这么厉害的功能,语法一定很复杂吧,不不不,不要被奇怪的符号吓到,常用规则只有几个:我们可以使用()对文本中的匹配文本进行分组,提取关键信息,比如说我们要找一大段文本中的所有日期,但是对于其中的年月日有不同的用途,那我们就可以进行分组捕获这个模式可以匹配日期,并且分别捕获年月日,输入'2024-12-19':“用户ID:A123,电话:138-0013-800”可以用'/d+',就找到了'123','138','0013','800'可以用'^用户',返回匹配成功,因为这一行文本就是以“用户开头”1.邮箱验证:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
使用场景:用户注册验证、邮箱格式检查
2.手机号匹配(中国大陆):
精准匹配11位手机号,避免错误输入
3.身份证号验证:
匹配18位身份证,最后一位可以是数字或X
4.URL提取:
从文本中提取所有网页链接,s?表示http或https都匹配
5.中文匹配:
提取文本中所有中文字符
四、工具平台:
菜鸟教程在线工具:https://www.jyshare.com/front-end/854/
还是刚才的例子,我们输入'\d+',就找到了文本中的所有数字
正则表达式刚开始可能觉得复杂,一旦掌握,就会发现它能解决各种意想不到的问题。关键不是记住所有规则,而是:
掌握几个常用模式
学会查阅资料
多练习,从实际需求出发
下一篇我们将把Python和正则表达式结合起来,了解如何用Python进行正则匹配。
有以下文本,请设计正则表达式,分别提取订单号、金额(纯数字)和客户名
订单号: OD20240115001, 金额: ¥1,234.56, 客户: 张三订单号: OD20240116002, 金额: ¥890.00, 客户: 李四
以下代码实现了一个图形计算系统,选择正确的输出结果:
from abc import ABC, abstractmethodimport mathclass Shape(ABC): @abstractmethod def area(self): pass @abstractmethod def perimeter(self): pass def description(self): return f"这是一个{self.__class__.__name__}"class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return math.pi * self.radius ** 2 def perimeter(self): return 2 * math.pi * self.radius def diameter(self): return 2 * self.radiusclass Square(Shape): def __init__(self, side): self.side = side def area(self): return self.side ** 2 def perimeter(self): return 4 * self.sideclass Rectangle(Square): def __init__(self, length, width): super().__init__(length) # 注意这里! self.width = width def area(self): return self.side * self.width def perimeter(self): return 2 * (self.side + self.width)# 测试代码shapes = [ Circle(5), Square(4), Rectangle(3, 6)]results = []for shape in shapes: if isinstance(shape, Circle): results.append(f"直径: {shape.diameter():.1f}") results.append(f"面积: {shape.area():.1f}") results.append(f"周长: {shape.perimeter():.1f}")# 问题:results 列表中的第三个元素是什么?
A. "面积: 78.5"B. "面积: 28.3"C. "面积: 18.0"D. "面积: 12.0"正确答案:C
如果想一起学习数据分析相关知识,一起交流的朋友,欢迎加我微信,备注【数之真理】,9.9元解锁每日数据小知识分享,全网新手最友好!干货最充足!氛围最好的数据分析分享群等你加入!更多高能福利持续解锁中,福利多多,千万不要错过!!1对1数据咨询开放中,欢迎加V预约咨询,首次咨询享超值优惠