从字符串中提取并替换电子邮件和电话号码

时间:2014-07-31 20:47:15

标签: ruby regex nlp

我需要隐藏字符串中的电子邮件和电话号码。使用正则表达式替换格式良好的电子邮件/数字很容易,但其他格式呢?这是一个例子:

输入:

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位数(电话号码)的一系列数字,对分隔符有一定的敏感度。

做同样事情的最佳方法是什么?写复杂的正则表达式?使用自然语言处理库?

1 个答案:

答案 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中的规范。虽然大多数人尝试使用模式验证地址,但仅仅找到它们可能很难看。

在任何一种情况下,都有正则表达式模式尝试这样做,但是当它们被用力推动时它们都会失败。

对我而言,这听起来像一个由不知情的高管做出的错误想法,类似于请求

  

编写一个删除所有脏词的过滤器。

我曾经收到过的。 (是的,对。从地球上所有的书面和口头语言,或仅仅是人们想要使用这些词语?)它很容易解决,并且,对很多人来说将是一个挑战打败它。