Regex 正则表达式与文件结尾的字符串不匹配

Regex 正则表达式与文件结尾的字符串不匹配,regex,Regex,我有一个用于搜索电子邮件的Regexp: 它可以很好地处理不在文件末尾的字符串,但当我将电子邮件格式的字符串放在文件末尾时,它无法检测电子邮件。请帮助更正此regexp。任何帮助都会很好。 有一段文字是我尝试测试的: NX_本地_主机=@@XXXXXX@@ NX\u用户=@@YYYYYYY@@ NX\U坍落度\U主机=@@NX\U坍落度\U主机@@ NX_坍落度_名称=2100 nhbigshow@yahoo.com NX_管理器端口号=2300 NX_键=0x4E58000 NX_服务器=@@

我有一个用于搜索电子邮件的Regexp:

它可以很好地处理不在文件末尾的字符串,但当我将电子邮件格式的字符串放在文件末尾时,它无法检测电子邮件。请帮助更正此regexp。任何帮助都会很好。 有一段文字是我尝试测试的:

NX_本地_主机=@@XXXXXX@@ NX\u用户=@@YYYYYYY@@ NX\U坍落度\U主机=@@NX\U坍落度\U主机@@ NX_坍落度_名称=2100 nhbigshow@yahoo.com NX_管理器端口号=2300 NX_键=0x4E58000 NX_服务器=@@NX_服务器@@ @NX_JRE_INSTALL_DIR=@@NX_JRE_INSTALL_DIR_HOLA_NX@@

DKBO609@NX_JRE_INSTALL_DIR=@@NX_JRE_INSTALL_DIR_HOLA_28@@

NX_DOMSRVR_NAME=任何 ! @NX_NOFASTCHAN=于2013年6月6日星期四11:54:17卸载 NX_LOG=$NX_LOCAL/LOG NX_站点=$NX_本地/站点 @NX\u首选项\u DIR=H:\USPSD anhbigshow@yahoo.com C:\abc\def anhbigshow@gmail.com


这是唯一的比赛nhbigshow@yahoo.com.

如果您能举例说明什么是匹配的,什么是不匹配的,这会有所帮助。如果要匹配必须以X结尾的内容,则表达式为X$。你很可能会在这里找到答案: 有时我自己也会去那里进修。这是一本非常详细的指南

作为测试,看看它是否能与最后一部分匹配。我感觉你在寻找的是每一个项目都以com | de | sng | hkg | net | appl | it | lu | mc | sg | us | hk | ch结尾,后面是一些表示行结束的分隔符。试试这个:

.*(com|de|sng|hkg|net|appl|it|lu|mc|sg|us|hk|ch)([^a-zA-Z]|$)
我用问号表示它是可选的。括号表示该集合中的1个项目将在那里。让我知道这是否有帮助..*意味着任何字符都可以出现0次或更多次

你要找的应该是类似的东西。这是评论中的链接

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|
biz|info|mobi|name|aero|asia|jobs|museum)\b

我假设您正在使用python。如果是这样,您的正则表达式将与findall一起工作


您的文件行结尾是否配置为windows、mac或unix?您使用的是什么程序?您使用的是什么输入?你确定正则表达式与不在文件末尾的字符串相匹配吗?你的文件是什么样子的?@AmalMurali aduch和iamnotmaynard问你这些问题的一个原因是正则表达式本身匹配。所以这些关于你的环境的问题很重要。你是先说的吗nhbigshow@yahoo.com不匹配?OP已在使用\b |$|\z |\z |\n,这是。我不认为[\b\z\z\n]?$是正确的,也不认为它会起作用,因为$在\z之后永远不会出现。您在哪里使用正则表达式?Java,VB。。。?每个库都非常不同,每个库都有很多特殊的特性。哦,它一定是Perl。由于您正在寻找电子邮件地址,请查看此。和RFC5322。您可以再次检查电子邮件部分是否正确。使用[^a-zA-Z]|$应该足以显示字符串的.com/.edu/.de部分已结束。在可能的情况下,我会避免使用\b和\z,但这只是我个人的偏好,以避免意外的功能。我使用的是c。它只与第一个案例相匹配。如果不亲自测试,那么接下来的事情就是尝试修改您的示例,看看您是否可以nhbigshow@yahoo.com停止匹配并anhbigshow@gmail.com开始匹配。你也许能找出问题所在。这里可能有一个Unicode字符,你看不见,或者是其他错误。我用的是C。你能用C解释一下吗?它只匹配了第一个案例我不知道C。一定有某种方法可以搜索C中的所有事件。
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|
biz|info|mobi|name|aero|asia|jobs|museum)\b
>>> string
'NX_LOCAL_HOST=@@XXXXXX@@ \nNX_USER=@@YYYYYYY@@ \nNX_SLUMP_HOST=@@NX_SLUMP_HOST@@        \nNX_SLUMP_NAME=2100 \nnhbigshow@yahoo.com \nNX_MGR_PORTNUM=2300 \nNX_KEY=0x4E580000 \nNX_SERVER=@@NX_SERVER@@ \n@NX_JRE_INSTALL_DIR=@@NX_JRE_INSTALL_DIR_HOLA_NX@@\n\n\nDKBO609 @NX_JRE_INSTALL_DIR=@@NX_JRE_INSTALL_DIR_HOLA_28@@\n\n\nNX_DOMSRVR_NAME=ANY_DE \n! @NX_NOFASTCHAN=Deinstalled Thu Jun 06 11:54:17 2013 \nNX_LOG=$NX_LOCAL/log \nNX_SITE=$NX_LOCAL/site \n@NX_PREFERENCE_DIR=H:\\USPSD \nanhbigshow@yahoo.com \nC:\x07bc\\def \nanhbigshow@gmail.com'
>>> regex = re.findall(r"\b([a-z]\w{1,13}\.)?([a-z]\w{1,13})@([a-z]\w{1,13}\.){1,5}(com|de|sng|hkg|net|appl|it|lu|mc|sg|us|hk|ch)(\b|$|\z|\Z|\n)",s)
>>> regex
[('', 'nhbigshow', 'yahoo.', 'com', ''), ('', 'anhbigshow', 'yahoo.', 'com', ''), ('', 'anhbigshow', 'gmail.', 'com', '')]