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

时间:2014-06-17 03:34:08

标签: regex

我有一个用于搜索电子邮件的正则表达式:

\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)


它对于不在文件末尾的字符串工作正常,但是当我在文件末尾放置带有电子邮件格式的字符串时,它无法检测到电子邮件。请帮助纠正这个正则表达式。任何帮助都会很棒。
我试过测试的文字:


NX_LOCAL_HOST = @@ XXXXXX @@
NX_USER = @@ YYYYYYY @@
NX_SLUMP_HOST = @@ NX_SLUMP_HOST @@
NX_SLUMP_NAME = 2100
nhbigshow@yahoo.com
NX_MGR_PORTNUM = 2300
NX_KEY = 0x4E580000
NX_SERVER = @@ NX_SERVER @@
@NX_JRE_INSTALL_DIR = @@ NX_JRE_INSTALL_DIR_HOLA_NX @@


DKBO609 @NX_JRE_INSTALL_DIR = @@ NX_JRE_INSTALL_DIR_HOLA_28 @@


NX_DOMSRVR_NAME = ANY_DE
! @ NX_NOFASTCHAN = Deualled Thu Jun 06 11:54:17 2013
NX_LOG = $ NX_LOCAL /日志
NX_SITE = $ NX_LOCAL /网站
@ NX_PREFERENCE_DIR = H:\ USPSD
anhbigshow@yahoo.com
C:\ ABC \ DEF
anhbigshow@gmail.com

它唯一匹配" nhbigshow@yahoo.com"。

2 个答案:

答案 0 :(得分:0)

如果你给出一个匹配和不匹配的例子会有所帮助。如果您希望匹配必须以X结尾的内容,则表达式为X$。您很可能会在这里找到答案: http://en.wikipedia.org/wiki/Regular_expression 我有时候会把自己作为复习者来结束。这是一个非常详细的指南。

作为测试,看看它是否只能匹配最后一部分。我感觉你要找的是每个项目以(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

答案 1 :(得分:0)

我假设你正在使用python。如果是这种情况,您的regex将与findall

一起使用
>>> 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', '')]