Regex 正则表达式-提取电子邮件地址之间的文本

Regex 正则表达式-提取电子邮件地址之间的文本,regex,Regex,从下面的文字,我需要提取电子邮件和名称以及 Vicente Clark vicente.clark@gmail.com Mark van der Zant mark.zant@protonmail.com Georgy Collins georgy.collins@yahoo.com Paul Danilsson paul.danilsson@live.com 我已经找到了电子邮件部分,但是我需要将名称存储在一个单独的变量中 文本的格式可能并不总是与新行配合得很好。您可以使用以下正则表达式:

从下面的文字,我需要提取电子邮件和名称以及

Vicente Clark
vicente.clark@gmail.com
Mark van der Zant
mark.zant@protonmail.com
Georgy Collins
georgy.collins@yahoo.com
Paul Danilsson
paul.danilsson@live.com
我已经找到了电子邮件部分,但是我需要将名称存储在一个单独的变量中


文本的格式可能并不总是与新行配合得很好。

您可以使用以下正则表达式:

(?:^|\r?\n)(.*?)\r?\n(.*?@.*?)(?=\r?\n|$)
  • (?:)
    不匹配的组(否则这将是第一个
    $1
  • ^\r?\n
    换行符(Windows
    \r\n
    或UNIX
    \n
    )或字符串的开头(第一个条目的开头没有换行符)
  • (.*)
    任何字符,但尽可能少的字符(直到下一个换行符)
  • (.*.@.*?
    与电子邮件地址匹配,但不进行任何验证,除非其中必须包含
    @
    字符
  • (?=\r?\n |$)
    模式后面必须跟着
    \r?\n |$
    ,但它不匹配(这是必需的,否则,之后的换行符将已经是此匹配的一部分,因此不能是下一个匹配的一部分)<代码>\r?\n |$匹配换行符或字符串的结尾
  • 确保使用全局标志匹配多个事件(
    /g
如果文本“并非总是使用换行符进行良好的格式设置”,则需要提供更多关于如何以其他方式构造文本的信息。Regex依赖于固定的模式,需要单独处理每一种可能性

下面是一个JavaScript示例:

var text=document.getElementById('main').innerHTML;
var regex=/(?:^\r?\n)(.*?\r?\n(.*?@.*?(=\r?\n$)/g;
var match=regex.exec(文本);
while(匹配!==null){
log(匹配[1]+“:”,匹配[2]);
match=regex.exec(文本);
}
#主{
空白:预处理;
字体系列:monospace;
}
比森特·克拉克 维森特。clark@gmail.com 马克·范德尚 做记号zant@protonmail.com 乔治柯林斯 乔治。collins@yahoo.com 保罗·丹尼尔森
保罗。danilsson@live.com为什么要投反对票?马克·范德赞特·马克。zant@protonmail.com怎么可能呢?我想提取全名,而不仅仅是名字。因此数组将包含['Vicente Clar','Mark van der Zant',等等。你使用什么语言?Php?Python?JS?…我使用的是JS…这将是一个用户输入..用户应该以上面的格式输入文本-名称+新行+电子邮件…我希望名称总是在电子邮件之前,但可能会遗漏新行。你可以尝试一些东西例如。这会将
@
前面的所有内容都作为电子邮件地址的一部分,而不是空白。它会在电子邮件地址和名称之间强制使用空格或换行符。它工作得很好…以注释中的示例为例,即使换行符丢失,它也会工作…我遇到问题的唯一情况是前一封电子邮件和下一封电子邮件之间缺少换行符好的,然后使用。这应该适用于所有情况。