所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

一看就懂的正则表达式教程|零基础从小白到精通|保姆级实战案例详解

一看就懂的正则表达式教程|零基础从小白到精通|保姆级实战案例详解 一

文章目录CloseOpen

其实我以前也这么想。去年帮做电商运营的朋友处理用户评论数据,他们团队要从5000条评论里提取出提到的”快递问题”和”商品质量”关键词,还要记下对应的用户手机号。当时他们三个人手动筛选,从早上弄到半夜才弄完3000条,眼睛都快瞎了。我看着他们复制粘贴的样子,忍不住说:”你们试试正则表达式啊,半小时就能搞定。”朋友一脸怀疑:”就那个全是符号的玩意儿?我们连Excel公式都玩不明白。”结果我花了20分钟教他们写了两个简单的表达式,一个提取手机号(d{11}),一个匹配关键词(快递[问题|慢|丢件]|商品[质量|破损|瑕疵]),用Python跑了一遍,剩下的2000条数据5分钟就处理完了。后来他们老板知道了,专门让我给团队做了次分享,现在整个部门处理文本数据都离不开正则表达式了。

为什么正则表达式总学不会?破解3个让你越学越懵的误区

你之所以觉得正则难,可能不是因为你笨,而是一开始就走错了路。我带过不少新手,发现大家学不会正则,往往是踩了这3个坑:

第一个坑是”上来就背语法表”。很多教程一开篇就扔给你一张元字符表,d匹配数字、w匹配字母、代表0到多个……看着就头大,背了也记不住,更不知道怎么用。其实学正则就像学做菜,你不用先背完所有调料的名字,先跟着菜谱做一道番茄炒蛋,自然就知道盐和糖什么时候放。比如你想从快递单号里提取数字部分(比如”SF1234567890123″里的”1234567890123″),根本不用背表,直接记住d+就能匹配连续的数字——d是数字,+是”至少有一个”,组合起来就是”一串数字”,是不是很简单?

第二个坑是”只学不练,没有即时反馈”。我见过有人把教程从头到尾看完,觉得自己懂了,结果实际要用的时候,写出来的正则要么匹配不到内容,要么把无关的文本也匹配进来,试了几次就放弃了。这就像学游泳只看视频不下水,永远学不会。正确的做法是边学边用工具测试,比如Regex101这个网站,左边输入正则表达式,中间放测试文本,右边实时显示匹配结果,哪里错了一目了然。我自己写正则的时候,哪怕很简单的表达式,也会先用这个工具测一遍,确认没问题再用到实际工作中。

第三个坑是”害怕复杂表达式,不敢拆解”。你可能见过验证邮箱的正则表达式,比如^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$,一看这么长就慌了。但其实它就像乐高积木,是由几个简单部分拼起来的:[a-zA-Z0-9._%+-]+是邮箱用户名(字母、数字、点、下划线等,至少有一个),@是必须有的@符号,[a-zA-Z0-9.-]+是域名(比如qq.com的”qq”),.[a-zA-Z]{2,}是后缀(比如”.com”,至少2个字母)。把长表达式拆成小块,每个部分单独理解,就会发现一点也不难。

从0到1学正则:3步掌握核心语法+5个职场高频案例

其实学会正则表达式,关键是掌握”匹配思维”——告诉计算机你要找的文本”长什么样”。跟着这3步走,当天就能写出能用的正则:

第一步:吃透6个核心元字符,用生活场景记牢

元字符就是正则里有特殊含义的符号,不用记太多,先掌握这6个就够用80%的场景:

  • d:匹配数字(0-9),比如找手机号就靠它,d{11}就是”11个连续数字”
  • w:匹配字母、数字、下划线(可以理解为”单词字符”),比如提取用户名用w+
  • s:匹配空格、换行等空白字符,清理文本里的多余空格就用s+(多个空格)替换成一个空格
  • .:匹配除换行外的任意字符,比如想匹配”快递123″、”快递abc”,用快递.就能匹配(注意要匹配真正的点,得用.,因为.本身是元字符)
  • []:字符集,匹配括号里的任意一个字符,比如[0-9a-zA-Z]匹配数字或字母,[^d]带^表示”非”,匹配不是数字的字符
  • ():分组,把部分表达式括起来,方便后续提取或重复,比如(d{3})-(d{4})可以把”123-4567″分成”123″和”4567″两组
  • 记这些的时候,联想生活场景就不会忘:比如d{11}像快递单上的手机号(11位数字),s+像整理桌面时把散落的废纸(空格)堆成一摞(一个空格),[]像你的衣柜抽屉,指定”放袜子的抽屉”(只匹配袜子)。

    第二步:掌握量词和位置符,避免”匹配过头”或”匹配不到”

    有了元字符,还需要告诉计算机”要匹配多少个”,这就是量词;以及”匹配的文本在哪里”,这就是位置符:

  • 量词:(0到多个)、+(1到多个)、?(0或1个)、{n}(刚好n个)、{n,}(至少n个)、{n,m}(n到m个)。比如d可能匹配不到数字(0个),d+至少匹配1个数字,所以提取手机号必须用d{11}(刚好11个),不能用d+(可能匹配12个数字)。
  • 位置符:^(开头)、$( )、b(单词边界)。比如验证手机号必须用^d{11}$^确保手机号从开头开始,$确保到 结束,避免从”13800138000123″里错误匹配出”13800138000″。
  • 举个例子:你想从”用户ID:user123 年龄:25″里提取年龄数字,用d+会匹配到”123″和”25″,但加上位置符年龄:d+,就能精准匹配”年龄:25″,再用分组年龄:(d+),就能单独提取出”25″——这就是分组的妙用。

    第三步:5个职场高频案例,手把手教你写能用的正则

    光说不练假把式,这5个案例都是我工作中常用的,跟着做一遍,你就知道正则有多实用:

    案例1:提取Excel表格中的手机号

    假设表格里的手机号格式乱七八糟:”138 0013 8000″、”139-1234-5678″、”(137)9876 5432″。直接用d{11}匹配不到带空格或横线的,怎么办?

    先把分隔符去掉:用[s-()]匹配空格、横线、括号,然后用d匹配数字,组合成d[s-()]?d{4}[s-()]?d{4}——[s-()]?表示”可能有一个分隔符”,这样不管有没有分隔符,都能匹配到11个数字。最后用工具提取数字部分,就是干净的手机号了。

    案例2:批量清洗爬虫数据中的HTML标签

    爬下来的数据里经常混着


    原文链接:https://www.mayiym.com/45267.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码