针对你的问题,简单回答如下:正则用途很广很多(详见后),是程序员的强力工具箱,广泛用于前后端对字段合法性的校验,以及爬虫筛选并规整数据。
至于Python正则表达式,只要懂基本的compile,search,match, findall,剩下的要用再查[文档](https://docs.python.org/3.6/library/re.html)。当然,练得纯熟也好。
你一定要会正则表达式,因为它用途太多太广。
正则用的范围很广,因为它用于处理字符串的能力又常常被需要,且它作为一种比Python小得多的微型语言,在各种系统、软件、语言等都能得到很好地支持——你在搜索引擎、命令行、各种语言、各类编辑器查找等等都能找到它的身影。
至于它的“多用途”,个人总结为一句话:筛选验证批量改。
筛选
若是要在电脑找一个文档,只依稀记得后缀是pdf,文件名含有视频 ,这时就能用Everything的正则表达式搜索功能,输入.*?视频.*?\.pdf ,便可搜索到。https://www.voidtools.com/zh-cn/www.voidtools.com
Unix的grep,能让程序员从成百上千行输出中找到自己想要的那几条,下图为本人以前做过的算法分析练习的截图,从500行log中找出有用的二十多条记录:
验证
很多网站注册都要邮箱,那它怎么知道你输入的是不是邮箱呢?一般就是用正则表达式。
同样的,身份证、手机号码、银行卡号……
这些一般是后端做的工作,但有些前端也要写这类“合法性验证”。
批量改
假设你想将A-Z26个函数转到AZ这个class里,但是要加上self,手动加很麻烦,怎么办呢?
def A(A):
pass
def B(B):
pass
# 。。。
def Z(Z):
pass
本人用vscode的替换功能将(def .*?\()(.*?\):) 替换成$1self, $2,便可以得到下面的结果:
def A(self, A):
pass
def B(self, B):
pass
# 。。。
def Z(self, Z):
pass
至于如何函数间的调用,这个问题就不是只靠正则表达式就能解决的了。
还有更常见的例子,叫做爬虫。比如要一些地图坐标(23.142141, 163.135534) 这种乱七八糟的数据处理一下吧?不然爬来手工录入Excel?
正则还有很多用途等着你探索。