首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在大文本中找到某种模式的有效方法是什么?

在大文本中找到某种模式的有效方法是什么?
EN

Stack Overflow用户
提问于 2010-05-11 22:03:38
回答 4查看 298关注 0票数 3

我想从一个大的文本文件中提取电子邮件地址。做这件事最好的方法是什么?

我的想法是在文本中找到'@',并使用"Regex“在这个位置和长度512之前在(例如)256个字符处找到电子邮件地址。

P.S.:直截了当地说,我想知道在一个巨大的文本中找到一些模式(比如电子邮件地址)的最好和最有效的方法。

EN

回答 4

Stack Overflow用户

发布于 2010-05-11 22:11:48

256和512听起来像任意值。

  • 您确实可以扫描@符号,但随后必须前后阅读,直到遇到电子邮件地址中不允许的字符(例如,另一个@符号、空格、反斜杠.)
  • 引用维基百科的话:

电子邮件地址的本地部分可能长达64个字符,域名最多可能有255个字符。

所以这些价值会更好。

现在结合这两种方法和瞧,你就有了你的算法。

票数 1
EN

Stack Overflow用户

发布于 2010-05-11 22:26:06

这取决于你想要多少假阳性和假阴性。电子邮件地址通常由字母、数字和某些符号组成。然而,尽管在一个真正的电子邮件地址中看到这些字符的情况可能是非常罕见的,但标准的当然 允许它。所以你真的需要决定你想要多少个真正的匹配,有多少匹配你的正则表达式,但实际上不是电子邮件地址。

这里有一个答案排除了许多有效的案例,也可能包含了太多的案例:

代码语言:javascript
运行
AI代码解释
复制
[A-Za-z0-9!#$%&*+-=?^_~]{1,64}@[A-Za-z0-9-.]{1,255}\.[A-Z]{2,6}
票数 1
EN

Stack Overflow用户

发布于 2010-05-11 23:53:15

如果您绝对需要最有效的方法,我认为不应该使用正则表达式。

假设文本中几乎所有的@实例都是电子邮件地址,并且您使用的是一种具有快速前向和后向字符串遍历的语言,则该方法可能接近最快的:

  1. 搜索@
  2. 手动比较@后的每个字符,以确保它们在允许的ASCII范围内
  3. 跟踪是否在第一个空格之前找到有效域或其他有效终止字符。
  4. 再次从@符号向后搜索,比较每个字符以确保它们在本地组件的有效字符范围内。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2816358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档