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

字符串过滤正则表达式方法|常用写法与实战案例全解析

字符串过滤正则表达式方法|常用写法与实战案例全解析 一

文章目录CloseOpen

本文聚焦“字符串过滤”这一高频场景,从常用正则写法(比如过滤特殊字符、去除HTML标签、提取邮箱/手机号)入手,结合实战案例(比如表单校验、日志清洗、爬虫内容提纯),拆解正则的设计逻辑:怎么精准匹配目标字符?怎么避免误判?怎么优化效率?不管是刚接触正则的新手,还是想补实战经验的开发者,都能通过本文快速掌握“用正则精准过滤字符串”的核心方法,解决工作中80%的字符串处理问题。

你有没有过这种情况?运营让你清理用户留言里的乱码,你手动删了半小时,眼睛都花了还没弄完;或者爬虫爬了篇文章,里面全是

标签,复制出来根本没法读?我去年就帮朋友解决过这事儿——当时她盯着几百条留言里的emoji和火星文,快哭了,结果我用两行正则,5分钟就搞定了。其实正则没你想的那么难,今天我把自己常用的字符串过滤正则写法和案例整理出来,你直接抄作业就行,保证解决你80%的字符串处理问题。

先搞懂:字符串过滤用正则,到底在解决什么问题?

其实正则的核心就俩事儿——要么“找出你要留的内容”,要么“找出你要删的内容”。比如运营朋友的问题是“删了留言里的非文字内容”,那我们就写个正则,匹配所有不是中文、英文、数字的字符,然后替换成空;再比如爬虫的问题是“删了HTML标签”,那我们就写个正则,匹配所有<>的内容,替换成空。

去年我帮那个朋友的时候,她一开始说“正则好难啊,我学不会”,结果我给她演示了一遍,她立刻说“原来这么简单!”——真的,你不用记住所有正则语法,只要搞懂你要解决的问题对应的“模式”就行。比如:

  • 你要留中文、英文、数字,就写“匹配非中文、英文、数字的字符”(删掉它们);
  • 你要删HTML标签,就写“匹配从<开始到>结束的所有内容”(删掉它们);
  • 你要提取手机号,就写“匹配11位符合手机号格式的数字”(留下它们)。
  • MDN Web Docs里说得特实在:“正则表达式是处理字符串的强大工具,尤其适合模式匹配和替换”——它的本质就是帮你“按规则找东西”,比手动处理或字符串分割靠谱100倍。比如我之前帮技术部朋友分析用户日志,要提取里面的手机号,用字符串分割老出错(比如手机号中间有空格),用正则1[3-9]d{9}一下就找出了所有手机号,效率提升了80%。

    直接抄作业:常用字符串过滤正则的写法+实战案例

    我把自己平时用得最多的几个场景整理好了,每个都带写法、原理、实战案例,你直接复制粘贴就能用。

  • 最常用:过滤特殊字符(比如 emoji、火星文、乱码)
  • 正则表达式[^u4e00-u9fa5a-zA-Z0-9] 说明^在中括号里表示“非”,u4e00-u9fa5是中文,a-zA-Z是英文,0-9是数字——合起来就是“匹配所有不是中文、英文、数字的字符”。 实战案例:去年帮运营朋友清理公众号留言,用户发的内容里全是emoji(比如😂😭)、火星文(比如“朙兲見”)和奇怪符号(比如★→),她手动删了3小时才处理了100条。我给她写了这个正则,用Python的re.sub()方法替换成空字符串,5分钟就处理完了500条留言,她当场给我买了杯奶茶。 注意:如果想保留部分符号(比如逗号、句号),可以把它们加到正则里,比如[^u4e00-u9fa5a-zA-Z0-9,.]——这样逗号和句号就不会被删了。

  • 必学:去除HTML/XML标签(爬虫/复制内容专用)
  • 正则表达式]> 说明<-匹配标签的开始,[^>]匹配除了>之外的所有字符(包括标签里的属性,比如class="xxx"),>匹配标签的结束——这样就能把整个HTML标签(比如

    字符串过滤正则表达式方法|常用写法与实战案例全解析 二)都匹配到。 实战案例:我之前爬知乎的文章,想把内容复制到Word里编辑,结果粘贴后全是

    标签,手动删得我手酸。后来用这个正则替换,一下就把所有标签都删了,只剩纯文本,直接能用——比手动删省了半小时。 踩坑提醒:别用<-.>!这个是“贪婪匹配”,会匹配从第一个<到最后一个>的所有内容,比如你有

    第一段

    第二段

    ,用会把整个内容都匹配成

    第一段

    第二段

    ,直接删掉所有内容。一定要用]>或者(非贪婪匹配),我之前就踩过这个坑,差点把爬的内容全删没了,后来查了MDN的文档才改对。

  • 高频:提取或过滤特定格式(手机号、邮箱、价格)
  • 这类场景是“提取你要的内容”,比如从一堆文字里找出手机号、邮箱,或者从日志里提取商品价格——正则的优势就是“不管内容多乱,只要格式对就能找到”。

    举几个最常用的例子:

  • 提取中国大陆手机号1[3-9]d{9}(匹配11位符合手机号格式的数字,比如13812345678);
  • 提取邮箱地址[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_-]+(匹配大多数邮箱格式,比如xxx@yyy.com、xxx-yyy@zzz.cn);
  • 提取商品价格(小数)d+.d{2}(匹配带两位小数的价格,比如19.99、123.45)。
  • 实战案例:上个月帮电商运营的朋友处理竞品数据,她爬了100个商品的页面,里面的价格藏在¥19.99里,用正则d+.d{2}一下就提取出了所有价格,直接导入Excel做分析——她之前用字符串分割,得先split(¥)再split(),老出错,用正则后效率提升了70%。

    常用字符串过滤正则表(直接抄)

    下面是我整理的“懒人表”,你保存下来,需要的时候直接查:

    过滤场景 正则表达式 说明 实战案例
    过滤特殊字符(留中文/英文/数字) [^u4e00-u9fa5a-zA-Z0-9] 匹配非中文、英文、数字的字符 清理公众号留言的emoji/火星文
    去除HTML/XML标签 ]> 匹配所有HTML/XML标签(含属性) 爬虫文章去标签转纯文本
    提取中国大陆手机号 1[3-9]d{9} 匹配11位符合手机号格式的数字 日志中提取用户手机号
    过滤空格/换行/制表符 s+ 匹配所有空白字符(空格、换行、Tab) 清理文本中的多余空行

    最后说个小技巧:用在线工具测正则

    写完正则别急着用,先去Regex101(https://regex101.com/)测一下——里面能实时看匹配结果,还能解释正则的每一部分是什么意思。我每次写正则都用这个工具,避免出错。比如你写了个过滤特殊字符的正则,把用户留言复制进去,立刻就能看到哪些字符会被匹配到,超方便。

    你要是按这些方法试了,比如清理留言、提取数据,欢迎回来告诉我效果——上次有个读者用去除HTML标签的正则处理爬虫内容,说省了他3小时,我听了特开心。要是你有不懂的正则写法,或者遇到奇怪的匹配问题,也可以留言问我,我帮你看看!


    其实我之前就踩过误删的坑——去年帮朋友清理爬虫来的文章,想删HTML标签,我一开始写了个<.>的正则,结果替换完发现整个文章内容都没了!后来查了资料才明白,是“贪婪匹配”,就像饿极了的人见啥吃啥,不管后面有多少个>,它都要从第一个<吃到最后一个>。比如“

    第一段

    第二段

    ”,它会把整个“

    第一段

    第二段

    ”都裹进去,一替换就全没了。后来改成]>才对,这个是“非贪婪”的,像吃自助餐点到为止——只匹配从<开始到下一个>为止的内容,比如

    会被匹配,

    也会被匹配,但中间的“第一段”“第二段”根本碰都不碰,替换完就是“第一段第二段”,完全没误删。

    你要是怕出错,还有个超好用的笨办法——先去在线工具测一遍。我现在不管写啥正则,都先打开Regex101,把要处理的内容复制进去,再把正则贴上去,看高亮的部分是不是我要删的。比如之前帮运营清理用户留言,正则是[^u4e00-u9fa5a-zA-Z0-9],我把“用户说:今天😊吃了火锅123!”复制进去,高亮的正好是😊和!,就是要删的特殊字符,确认没问题才用到实际内容里,结果一条有效文字都没误删。再比如提取手机号,我写了1[3-9]d{9}的正则,把“我的电话是13812345678,别打12345678901”复制进去,高亮的只有13812345678——因为12345678901开头不是1[3-9],所以不会被匹配,这样就不会提错号。

    还有次帮电商运营提取商品价格,正则是d+.d{2},我先把“商品价格:¥19.99,促销价12.50”复制进去,高亮的是19.99和12.50,正好是要的价格,替换完直接导Excel,一点错都没有。你看,其实只要注意“不贪多”(用非贪婪匹配)和“先测试”这两点,误删的概率几乎为零——我现在处理字符串,再也没犯过之前那种全删光的傻事了。


    正则表达式看起来好复杂,新手能快速学会吗?

    完全可以。新手不用死记所有正则语法,只需聚焦“你要解决的问题”——比如要过滤特殊字符,就记“匹配非中文/英文/数字的正则”;要去HTML标签,就记“匹配的正则”。文中给的“抄作业”表格直接用,再配合Regex101这样的在线工具实时测试,很快就能上手。

    用正则过滤字符串时,会不会误删有效内容?

    只要注意两个细节就能避免:一是用“非贪婪匹配”(比如用]>而不是<.>),防止匹配范围过大;二是先在在线工具里测试——把要处理的内容复制进去,看正则匹配的部分是不是你要删的,确认没问题再实际使用。比如文中提到的“去HTML标签”,用]*>就不会误删标签外的文字。

    除了文中的场景,还有哪些常见需求能用正则解决?

    很多高频场景都适合:比如过滤文本中的多余空格(用s+替换成单个空格)、提取URL中的参数(比如从https://xxx.com? id=123里提取id的值)、清理文章中的回车换行(用n+替换成空)、甚至提取身份证号(用d{17}[dXx]匹配18位身份证)。只要是“按格式找内容”的需求,正则都能搞定。

    有没有免费的在线工具可以测试正则?

    推荐两个常用的:一个是Regex101(https://regex101.com/),支持实时预览匹配结果,还能解释正则的每一部分含义;另一个是“站长工具正则表达式测试”(https://tool.chinaz.com/regex/),适合快速验证简单正则。这两个工具都能帮你避免写正则时出错。

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

    社交账号快速登录

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