Regex使用regexpal,但不使用Python

2024-09-29 03:36:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个regex来捕获电子邮件id。测试了好几个小时regexpal.com网站. 在这个网站上,它可以捕捉到所有的电子邮件ID。当我在Python中替换相同的regex时关于芬德尔(图案、线条),它抓不到它。在

正则表达式:

[a-zA-Z0-9-_]+[(.)?a-zA-Z0-9-_]*\s*(@|at)\s*[a-zA-Z0-9-_]+\s*(.|dot)\s*[a-zA-Z0-9-_]*\s*(.|dot)\s*e(\-)?d(\-)?u(\-)?(.,)?

示例:

^{pr2}$

(在上正确突出显示regexpal.com网站). 在

使用Python:

 for line in f:
    print 'Line = ',line
        matches = re.findall(my_first_pat,line)
    print 'Matches = ',matches

输出:

Line =    <TR> <TD><B>E-Mail: </B> <TD><A HREF=MailTo:example.young@stackoverflow.edu>example.young@stackoverflow.edu</A>

Matches =  [('@', 'd', '.', '', '', '', ''), ('@', 'd', '.', '', '', '', '')]

问题是什么?在


Tags: com网站example电子邮件linedotregextd
2条回答

此处必须使用\.而不是.

(.|dot)

如果你只是想说,字母之间可以有连字符 在edu部分,您可以在不使用斜杠和分组的情况下执行此操作:

^{pr2}$

如果使用()只是对符号进行分组(而不是用于捕获), 必须使用(?:)代替:

(?:@|at)

re.findall读取{a1}:

If one or more groups are present in the pattern, return a list of groups

您的组只捕获at符号、点等,因此返回的仅此而已关于芬德尔. 要么使用非捕获组,将整个组打包,要么使用re.finditer。在

{cd4}也不正确地指出了这个问题

相关问题 更多 >