我需要隐藏字符串中的电子邮件和电话号码。使用正则表达式替换格式良好的电子邮件/数字很容易,但其他格式呢?这是一个例子:
输入:
Email addresses like
的 email@example.com
or
的 email AT example DOT com
should be replaced. Phone numbers like
的 347 323 4567
or
的 tree four seven, three two three four five six seven
should also be replace.
输出:
Email addresses like
的 (email hidden)
or
的 (email hidden)
should be replaced. Phone numbers like
的 (phone hidden)
or
的 (phone hidden)
should also be replace.
AirBnB的消息传递系统非常擅长这样做。 Apparently they used to do that:
它寻找@符号,“这是我在任何DOT com中”的拼写和至少7位数(电话号码)的一系列数字,对分隔符有一定的敏感度。
做同样事情的最佳方法是什么?写复杂的正则表达式?使用自然语言处理库?
答案 0 :(得分:3)
这在代码中并不容易,并且可能会给您的用户带来不愉快的后果,然后是您的客户支持人员。
Phone numbers can be entered in a large number of formats if you allow for international numbers
123-446-7890
可以是电话号码,也可以是x=123-456-7890
之类的简单减法。想象一下,当用户获得x=(phone hidden)
时,用户会有多么恼火。
电子邮件地址是一个更难的问题,因为they can vary in all sorts of ways。您可以通过阅读RFC 2822来获取电子邮件地址的规范,并且始终是Perl's Mail::RFC822::Address module中的规范。虽然大多数人尝试使用模式验证地址,但仅仅找到它们可能很难看。
在任何一种情况下,都有正则表达式模式尝试这样做,但是当它们被用力推动时它们都会失败。
对我而言,这听起来像一个由不知情的高管做出的错误想法,类似于请求
我曾经收到过的。 (是的,对。从地球上所有的书面和口头语言,或仅仅是人们想要使用这些词语?)它很容易解决,并且,对很多人来说将是一个挑战打败它。编写一个删除所有脏词的过滤器。