`
linliuwei
  • 浏览: 33172 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个从content中提取email的小方法

阅读更多
这两天搞了一个时间程序,就是定时每天将一个地方的数据导出到另一个地方,其中有个小功能是提取content中的email,写了这个小方法,感觉还算不错,贴上来摆摆

/**
 * @author linliuwei
 * @create 2010-6-11
 */
public class UEStringUtil {

	private static Pattern pattern_email = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", Pattern.CASE_INSENSITIVE);

	public static boolean isEmail(String email) {
		if (email == null || email.length() < 1 || email.length() > 256)
			return false;
		return pattern_email.matcher(email).matches();
	}

	/**
	 * 是否有效的email字符[A-z a-z . - _]
	 * @param character
	 * @return
	 */
	public static boolean isEmailLetter(char character) {
		int ascii = character;
		// System.out.println(ascii);
		// A-Z 65 - 90
		if (ascii <= 90 && ascii >= 65) {
			return true;
			// a-z 97 - 122
		} else if (ascii <= 122 && ascii >= 97) {
			return true;
			// . - _
		} else if (ascii == 46 || ascii == 45 || ascii == 95) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 从字符串中提取email
	 * @param content
	 * @return
	 */
	public static String parseEmail(String content) {
		String email = "";
		if (content == null || content.length() < 1) {
			return email;
		}
		String token = "@";
		StringBuilder buff = new StringBuilder();
		char[] chars = content.toCharArray();
		//找第1个@的位置
		int index = content.indexOf(token);
		while (index != -1) {
			// @前项扫描
			int i = index - 1;
			while (i > 0) {
				char c = chars[i];
				if (isEmailLetter(c)) {
					buff.append(c);
				} else {
					break;
				}
				i--;
			}
			buff.reverse();
			buff.append("@");
			// @后项扫描
			i = index + 1;
			while (i < content.length()) {
				char c = chars[i];
				if (isEmailLetter(c)) {
					buff.append(c);
				} else {
					break;
				}
				i++;
			}
			
			String tmp = buff.toString();
			if (isEmail(tmp)) {
				//找到第1个匹配的email,终止扫描
				index = -1;
				email = tmp;
			} else {
				//继续找下一个@
				index = content.indexOf(token, index + 1);
				buff.delete(0, buff.length());
			}
		}
		return email;
	}

	public static void main(String[] args) {
		String test = "首先需@要创建一个SpriteFont文件。右击XNA项目的Content文件夹并@选择Add→New item。从对话框中@选择SpriteFont,起一个@名称(比如ourFont),然后点击Add。"
				+ "现在@看到一个XML页面。最重abc@cnd要的一行是设置FontName属性,可以将这个属性改成你想要绘制的@abc@cnd字体。接下去一行可以设置字体大小,你也@可以在以后缩放字体大小。 "
				+ "注意:你可abc@cnd以使用任@何安装在你@的计算机上的TrueType字体。要看到已经安@装的字体,可以打开C:目录(例如点击Start按钮,选择Run,并输入这个文件夹地址)。FontName列显示了可以指定的所有字体。例如,如果字体名称为Times New Roman (TrueType),你指定Times New Roman作为FontName 属性。 "
				+ "注意:当在另一台电脑@上编译代码时,那台电脑上abc@cnd也必须装有@这个字体,否则会报错。当心:当发布你的程序时,请确保你检查了字体的版权。 创建了SpriteFont文件后,在linliuwei@taobao.com.cn类中添加一个SpriteFont变量:";
		long start = System.currentTimeMillis();
		for (int i = 0; i < 50000; i++) {
			parseEmail(test);
			//System.out.print(parseEmail(test));
		}
		long end = System.currentTimeMillis();
		System.out.println();
		System.out.println((end - start) + " milliseconds");
	}
}



循环扫描50000次,连续执行10次平均730毫秒
0
0
分享到:
评论

相关推荐

    获取eml/txt文件中的email地址

    下面是一个简单的示例代码,演示如何从eml或txt文件中提取电子邮件地址: ```python import re def extract_emails(file_path): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() email_...

    批量提取eml

    5. 批量处理:将以上步骤封装到一个函数中,通过循环处理所有找到的EML文件,每次处理一个文件,提取其头信息和附件。 批量提取邮件头信息的流程类似,只是不涉及附件的保存,而是聚焦于解析和记录邮件头数据。 在...

    aaa.rar_提取网页_正则_正则表达式_网页_邮件提取

    在本主题“aaa.rar_提取网页_正则_正则表达式_网页_邮件提取”中,主要涉及到如何利用正则表达式从网页中提取特定信息,如URL地址和电子邮件E-mail地址。以下将详细介绍这一过程。 首先,了解正则表达式的概念。...

    电子邮件附件:Clojure库,使从电子邮件中提取附件变得简单

    电子邮件附件 Clojure库使从电子邮件中提取附件变得简单。用法示例-从电子邮件中提取CSV文件: ; ;... 还有一个query名称空间,可用于提取文件名或按名称查找附件: ( query/filenames content-typ

    提取txt文档里的邮箱地址

    本话题聚焦于从TXT文档中提取邮箱地址,这是一个涉及到正则表达式、文本处理和可能的数据清洗过程。 首先,我们需要理解TXT文档的性质。TXT文件是一种纯文本格式,不包含任何格式化信息,只包含可读的字符。由于...

    单独提取django_orm

    Django ORM,全称为Object-Relational Mapping,是Django框架中的一个重要组成部分,它提供了一种将数据库操作转化为Python对象的方法,使得开发者可以避免直接编写SQL语句,从而更加高效、安全地进行数据库操作。...

    C#读取.eml文件(带附件下载)

    在IT行业中,电子邮件处理是常见的任务之一,尤其是在自动化和数据提取的应用中。本文将深入探讨如何使用C#语言来读取并处理`.eml`文件,特别是如何在`.eml`文件中查找并下载附件。`.eml`文件是一种标准格式,用于...

    python之poplib模块下载并解析邮件.docx

    它首先尝试从邮件对象的`get_charset`方法获取字符集,如果找不到,则检查`Content-Type`头部,从中提取出`charset`参数。 `decode_str`函数使用`decode_header`来解码字符串。`decode_header`可以处理包含多种编码...

    Python批量采集邮箱EML文件

    本项目的目标是通过Python编写一个脚本来批量采集邮箱中的EML文件,并从中抽取特定的信息。 #### 二、技术选型与实现原理 ##### 1. 技术栈介绍 - **Python**: 一种广泛使用的高级编程语言,以其易读性和简洁性著称...

    使用正则表达式抓取页面Email

    在IT行业中,正则表达式(Regular Expression)是一种强大的文本处理工具,尤其在网页数据抓取和信息提取方面,它的作用不可小觑。本篇我们将深入探讨如何利用正则表达式来抓取网页中的电子邮件地址。 电子邮件地址...

    POP3读取email,保存附件到本地

    此外,`ConsoleApplication1`可能指的是项目名称,表明这是一个控制台应用程序,因此你可以在`Main`方法中放置上述代码。 总之,通过使用`Pop3Client`和`MimeMessage`类,我们可以实现从POP3服务器读取邮件并将其...

    正则取字符串-读写文件源码

    `RegexCut`可能是一个自定义方法,它可能实现了这样的功能:读取文件内容,然后使用正则表达式从中切割出需要的部分。 总的来说,正则表达式和文件操作是.NET 2.0开发中不可或缺的技能。熟练掌握它们,能让你在处理...

    linux shell发送Email邮件的方法详解

    这个命令将邮件内容通过标准输入传递给`sendmail`,`-t`参数指示`sendmail`从邮件源码中提取收件人信息。为使命令更易读,你可以将邮件内容保存到文件中,如`email.txt`,然后使用`cat`命令读取: ```bash cat ...

    安卓开发之实现用户注册并显示注册信息

    在`RegistrationSuccessActivity`中,从Intent中提取传递过来的注册信息,并显示在TextView或其他UI元素上。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate...

    jquery 读取XML 可运行

    jQuery的一个常见应用场景是与XML(eXtensible Markup Language)数据的交互,XML是一种结构化数据格式,常用于存储和传输数据。本示例中,我们将深入探讨如何使用jQuery来读取XML文件并将其内容展示在HTML页面上。 ...

    python收附件

    标题 "Python收附件" 涉及到的是使用Python编程语言来处理电子邮件,特别是从邮件中提取和下载附件。在Python中,有多种库可以实现这样的功能,如`imaplib`用于IMAP协议(Internet Message Access Protocol)来访问...

    【Python】网页信息筛选工具

    在本教程中,我们将探讨如何使用Python来创建一个网页信息筛选工具,并学习相关的核心知识点。 首先,我们需要了解`requests`库,它是Python中用于发送HTTP请求的库。通过`requests.get()`方法,我们可以获取网页的...

    Python库 | eml-analyzer-1.0.2.tar.gz

    今天我们要探讨的是一款名为"eml-analyzer"的Python库,版本为1.0.2,封装在一个名为"eml-analyzer-1.0.2.tar.gz"的压缩包中。这个库专门用于分析EML(Email Message Format)文件,帮助开发者和研究人员深入理解...

    email

    以上代码首先定义了SMTP服务器的配置,然后创建了一个邮件容器,并设置了发件人、收件人和主题。接着,将正文添加为纯文本格式,并读取一个名为'attachment.txt'的文件作为附件。最后,连接到SMTP服务器,登录并发送...

    Python学习菜谱

    在实际应用中,可以根据需求组合这些功能,例如,你可以创建一个脚本,该脚本根据用户输入的命令行参数,从ZIP文件中提取数据,然后通过邮件发送这些数据,同时包含一张图表或图片。通过这种方式,Python的这些功能...

Global site tag (gtag.js) - Google Analytics