

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
正则过滤的核心逻辑:先想“要留什么”,再写规则
我去年帮一个做餐饮外卖的客户处理订单备注,他们的备注里经常有“尽快送达!!!”“不要辣🤬”“加个卤蛋~~”,但后台系统只能识别“汉字、数字、常见标点”,其他字符会导致备注显示乱码。一开始我直接写了个正则[^a-zA-Z0-9u4e00-u9fa5,.!?]
(匹配不是字母、数字、汉字和常见标点的字符),结果把“🤬”和“~~”都删了,系统就能正常显示了。
这里的关键是:先明确“要保留的内容”,再用“非”规则删掉其他内容——比直接找“要删的内容”更高效,因为你永远不知道用户会输入什么奇怪字符,但“要留的内容”是固定的。
再比如,我帮一个HR朋友提取简历里的邮箱,她一开始用“@”分割字符串,结果有的简历里有多个@(比如“test@163.com@qq.com”),提取出来的邮箱不对。后来我教她用正则[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+
,这里的逻辑是:邮箱的结构是“用户名@域名.后缀”,用户名可以是字母、数字、下划线、减号,域名也是一样,后缀可以是.com、.cn之类的。用这个正则匹配,就能准确提取出正确的邮箱了——她试了后说,之前要花2小时处理50份简历,现在10分钟就搞定了。
MDN Web Docs在“正则表达式指南”里提到,“明确匹配目标是写出有效正则的第一步,不要试图用一个正则解决所有问题”——深以为然,我之前就犯过“贪多”的错,想写一个正则处理所有情况,结果反而出错,后来拆成“保留内容”和“提取内容”两个步骤,效率高多了。
3个高频场景的正则模板,直接抄就能用
我整理了自己常用的3个场景模板,都是平时帮朋友处理问题时反复验证过的,你直接复制就能用。
场景1:清理文本里的乱码和不可见字符
我遇到最多的问题就是乱码,比如爬虫爬下来的网页内容,或者用户复制粘贴的文本里有“�”“n”“t”之类的字符。这里有个万能正则:[x00-x1Fx7F-x9F]
——解释一下,x00
到x1F
是“控制字符”(比如换行、制表符),x7F
是“删除键”字符,x80
到x9F
是“扩展控制字符”,这些字符一般都是不可见的,或者显示成乱码。
比如,我之前爬一个美食博客的内容,爬下来的文本是“番茄鸡蛋汤的做法:n
场景2:提取指定格式的信息(比如手机号、邮箱)
提取手机号是最常见的需求,我帮一个做房产中介的朋友处理客户咨询时,他们的咨询里有“138-1234-5678”“139 1234 5678”“13712345678”之类的手机号,要统一提取成11位数字。这里用正则d{3}[
,然后把匹配到的内容里的“-”和“空格”去掉,就能得到11位手机号了。比如匹配“138-1234-5678”,替换掉“-”后就是“13812345678”。
再比如提取邮箱,用我之前说的[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+
,比如匹配“test_123@qq.com”“hello-world@163.com”都没问题。但要注意,这个正则不匹配“中文邮箱”(比如“张三@公司.com”),如果需要处理中文邮箱,可以把用户名部分改成[a-zA-Z0-9_-|u4e00-u9fa5]+
(加上汉字)。
场景3:去掉重复的空格或换行
我帮一个做文案的朋友处理文章草稿,他习惯用很多空格分隔段落,结果复制到公众号后台后,段落之间有很多空行。这里用两个正则:
+
(注意前面有个空格,匹配两个及以上空格)替换成(一个空格); n+
(匹配两个及以上换行)替换成n
(一个换行)。 比如原文本“今天天气不错 阳光很好nnn适合去公园玩”,处理后变成“今天天气不错 阳光很好n适合去公园玩”,排版一下子整齐了。
为了方便你对照,我做了个模板表:
场景 | 正则表达式 | 说明 | 示例 |
---|---|---|---|
清理乱码 | [x00-x1Fx7F-x9F] | 匹配不可见控制字符和乱码 | 原:你好�今天天气不错�� → 处理后:你好今天天气不错 |
提取手机号 | d{3}[
|
匹配带分隔符或不带的11位手机号 | 原:138-1234-5678 → 处理后:13812345678 |
去掉重复空格 | + | 匹配两个及以上空格 | 原:今天 天气 很好 → 处理后:今天 天气 很好 |
其实正则不难,关键是“多试”——我自己写正则的时候,都会用在线工具(比如“正则表达式测试器”)先试一遍,输入原字符串,看看正则匹配的结果对不对。比如我之前写提取邮箱的正则,一开始没加(.[a-zA-Z0-9_-]+)+
,结果匹配不了“test@qq.com.cn”这种带两级后缀的邮箱,后来加上后就对了——所以试错很重要,不用怕写错。
你要是遇到字符串过滤的问题,比如想清理评论里的广告,或者提取数据里的手机号,不妨试试我上面说的方法。要是正则写不对,或者匹配结果有问题,留言告诉我你的场景,我帮你看看怎么调整~
正则处理中文其实特简单,你记着[u4e00-u9fa5]这串字符就行——它是所有汉字的编码范围,能精准匹配任何中文。我之前帮一个做公众号的朋友处理留言,他的留言区总有粉丝发“今天的文章太棒啦🎉”“求更下期~🤩”,但他想把留言里的表情和乱码删掉,只留中文、数字和常见标点。我就给他写了个正则[^a-zA-Z0-9u4e00-u9fa5,.!?],意思是“不是字母、数字、汉字和,.!?这些标点的字符都删掉”,结果处理后留言变成“今天的文章太棒啦”“求更下期~”,完全符合他的要求。你看,只要把[u4e00-u9fa5]加进“要留的内容”里,中文就不会被误删,比挨个找要删的表情符号高效多了。
再比如提取中文邮箱,我帮HR朋友筛简历时遇到过——有的候选人写“张三@tech.com”“李四_123@company.cn”,原来的邮箱正则只认字母数字下划线,没法匹配中文用户名,结果提取出来全是空的。后来我把邮箱正则的用户名部分改成[a-zA-Z0-9_-|u4e00-u9fa5],就是在原来的基础上加了[u4e00-u9fa5],这样既能匹配字母数字,也能匹配中文了。她试了一下,“张三@tech.com”直接被精准提取出来,再也不用手动复制邮箱了。不过要注意,有的系统本身不支持中文邮箱,但如果是你自己处理数据,这个方法绝对管用。要是不确定写对没,你可以用在线正则工具测一下,输入“王五@test.com”,看正则能不能匹配上,没错再用,省得出错。
正则表达式太复杂,有没有快速上手的方法?
最快的方法是先明确“要保留的内容”——比如想清理订单备注的乱码,就先列出“汉字、数字、常见标点(.?!,)”这些系统能识别的内容,再用“非规则”(比如[^a-zA-Z0-9u4e00-u9fa5,.!?])删掉其他字符。另外可以用在线正则测试工具(比如“正则表达式测试器”),输入原字符串和规则,实时看匹配结果,不用死记所有语法,边试边调更高效。
正则怎么处理中文相关的字符串过滤?
处理中文时,用[u4e00-u9fa5]可以精准匹配所有汉字——比如想保留备注里的中文,就把这个范围加进“要留的内容”;如果是提取中文邮箱(比如“张三@公司.com”),可以把邮箱正则的用户名部分改成[a-zA-Z0-9_-|u4e00-u9fa5],这样就能匹配带汉字的用户名了。
正则匹配结果不对,应该怎么调整?
先找在线工具(比如“正则表达式测试器”)验证——把原字符串和正则规则输进去,看到底匹配了哪些内容。比如想提取邮箱却匹配到了多个@的错误内容,可能是没限制“后缀的格式”,这时可以加上(.[a-zA-Z0-9_-]+)+来约束后缀(比如.com.cn)。另外别贪多,一个正则解决一个问题,分步处理(比如先清理乱码再提取邮箱)更准确。
怎么用正则提取带-或空格的手机号?
用正则d{3}[
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com