如何从regex电子邮件提取中排除图像

如何从regex电子邮件提取中排除图像,regex,regex-negation,Regex,Regex Negation,我正在使用一些电子邮件提取器软件(惊喜)从网站上提取电子邮件。它使用正则表达式: [A-Z0-9._%+-]+@[A-Z0-9.-]{3,65}\.[A-Z]{2,4} 但这会产生大量的图片和电子邮件,如\u212000482_1@80xauto.jpg 我可以更改这个正则表达式,但我不知道如何排除以.png、.jpg等结尾的匹配项 有很多关于验证电子邮件的信息——以及这有多难——但我只想从结果列表中排除图像。Description 在示例文本中,不需要的子字符串类似于电子邮件地址,但方便地以

我正在使用一些电子邮件提取器软件(惊喜)从网站上提取电子邮件。它使用正则表达式:

[A-Z0-9._%+-]+@[A-Z0-9.-]{3,65}\.[A-Z]{2,4}
但这会产生大量的图片和电子邮件,如\u212000482_1@80xauto.jpg

我可以更改这个正则表达式,但我不知道如何排除以.png、.jpg等结尾的匹配项

有很多关于验证电子邮件的信息——以及这有多难——但我只想从结果列表中排除图像。

Description 在示例文本中,不需要的子字符串类似于电子邮件地址,但方便地以
jpg
结尾。因此,通过负前瞻,我们可以排除文件扩展名

(?!\S*\。(?:jpg | png | gif | bmp)(?:[\S\n\r]|$)[A-Z0-9.[uz0%+-]+@[A-Z0-9.-][3,65}\[A-Z]{2,4}

例子 现场演示

示例文本

droids@gmail.com _212000482_1@80xauto.jpg更多Droids@deathstar.com
样本匹配

droids@gmail.com 
更多Droids@deathstar.com
解释
节点说明
----------------------------------------------------------------------
(?!向前看,看看是否有:
----------------------------------------------------------------------
\S*非空白(除\n、\r、\t、\f、,
和“”)(0次或以上(与
(尽可能多)
----------------------------------------------------------------------
\.                       '.'
----------------------------------------------------------------------
(?:组,但不捕获:
----------------------------------------------------------------------
jpg‘jpg’
----------------------------------------------------------------------
|或
----------------------------------------------------------------------
png‘png’
----------------------------------------------------------------------
|或
----------------------------------------------------------------------
gif'gif'
----------------------------------------------------------------------
|或
----------------------------------------------------------------------
bmp'bmp'
----------------------------------------------------------------------
)分组结束
----------------------------------------------------------------------
(?:组,但不捕获:
----------------------------------------------------------------------
[\s\n\r]的任何字符:空白(\n\r,
\t、 \f和“”)、“\n”(换行符)、“\r”
(回车)
----------------------------------------------------------------------
|或
----------------------------------------------------------------------
$在可选的前\n和
“线”
----------------------------------------------------------------------
)分组结束
----------------------------------------------------------------------
)展望的结束
----------------------------------------------------------------------
[A-Z0-9.Z%+-]+以下任意字符:'A'到'Z','0'到'9',
“.”、“%”、“%”、“+”、“-”(1次或多次
(匹配尽可能多的金额)
----------------------------------------------------------------------
@                        '@'
----------------------------------------------------------------------
[A-Z0-9.-]{3,65}‘A’到‘Z’、‘0’到‘9’的任何字符,
“,”-”(在3到65次之间(匹配
尽可能多的钱)
----------------------------------------------------------------------
\.                       '.'
----------------------------------------------------------------------
[A-Z]{2,4}‘A’到‘Z’(介于2之间)的任何字符
和4倍(与最高金额匹配)
(可能的)
----------------------------------------------------------------------

您使用的语言是什么?为什么将TLD限制为4个字符?请看:我不懂这种语言-它是一种软件(由其他人编写),可以根据用户可以更改的正则表达式搜索文本/html文件。很明显,默认的正则表达式已经过时了-谢谢。谢谢你的回答。虽然它在测试仪中工作得很好,但当我将它插入软件时,它就不工作了——具有讽刺意味的是,它会返回一个额外的图像示例。不幸的是,该软件是一个“黑匣子”,无法判断它以何种方式(或使用何种语言)使用正则表达式。你能想出一个我可以尝试的替代公式吗?它会导致错误吗?或者它对某些比赛有效,而对其他比赛无效?你的应用程序运行的操作系统类型是什么,你知道你的应用程序是否需要java吗?很抱歉延迟回复你。不,没有错误。该应用程序正在windows pc上运行。不确定是否需要Java。回答得很好。帮了我很多忙。关于它在tester中工作,而不是在您的代码中,我遇到了类似的问题,这是因为我粘贴了模式,但没有将“re.DOTALL | re.IGNORECASE”添加到我的正则表达式查询中。例如,re.findall(模式、字符串)与我不匹配,但re.findall(模式、字符串、re.IGNORECASE)与我匹配。希望这能有所帮助。这对我也很有效,不过我需要在$lookahead之后加一个“