【发布时间】:2016-06-25 15:37:41
【问题描述】:
示例文本:“jhon 的电子邮件地址是 jhon@gmail.com”
我从正则表达式中识别 jhon 的电子邮件地址时出错。我是这个正则表达式的新手,所以希望得到您的宝贵答案。提前致谢 预期结果:jhon@gmail.com
【问题讨论】:
标签: java c# regex information-retrieval information-extraction
示例文本:“jhon 的电子邮件地址是 jhon@gmail.com”
我从正则表达式中识别 jhon 的电子邮件地址时出错。我是这个正则表达式的新手,所以希望得到您的宝贵答案。提前致谢 预期结果:jhon@gmail.com
【问题讨论】:
标签: java c# regex information-retrieval information-extraction
EmailRegex 以多种编程语言共享电子邮件地址的正则表达式。这里有两个例子:
Java:
/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i
C#:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
要使用正则表达式,请查看C# 和Java 文档或Java example / C# example
【讨论】:
假设您的电子邮件以空格分隔,并且中间有“@”
public static void Main()
{
string text = "There is an email@email.com address in this string";
int indexOfAt = text.IndexOf('@');
int end = text.IndexOf(' ', indexOfAt);
int start = text.LastIndexOf(' ', indexOfAt)+1;
string email = text.Substring(start, end - start);
Console.WriteLine(email);
}
【讨论】:
在 Java 中,您可以使用类似这样的方法来查找给定文本中的所有电子邮件地址:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class EmailAddressMatcher {
public static void main(String[] args) {
String text = "jhon's email address is jhon@gmail.com";
Pattern pattern = Pattern.compile("([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("found: " + matcher.group(1));
}
}
}
如果您想捕获匹配的电子邮件地址,只需在 while (matcher.find()) 循环中执行此操作。每个matcher.group(1) 都是文本中的一个电子邮件地址。
【讨论】: