RegEx程序中的异常行为

时间:2012-03-25 02:06:26

标签: python regex

我编写了以下正则表达式来匹配HTML文件中的一组电子邮件。电子邮件可以采用各种格式,例如

alice @ so.edu
alice at sm.so.edu
alice @ sm.com
<a href="mailto:alice at bob dot com">

我通常使用RegexPal来测试我的正则表达式,然后再用编程语言实现它们。我在最后发布的电子邮件示例中发现了一个奇怪的行为。 RegexPal向我展示了我的正则表达式的匹配,但在Python程序中使用相同的正则表达式时,它并没有给我一个打击。可能是什么原因?

 mail_regex = (?:[a-zA-Z]+[\w+\.]+[a-zA-Z]+)\s*(?:@|\bat\b)\s*(?:(?:(?:(?:[a-zA-Z]+)\s*
(?:\.|dot|dom)\s*(?:[a-zA-Z]+)\s*(?:\.|dot|dom)\s*)(?:edu|com))|(?:(?:[a-zA-Z]+\s*(?:\.|dot|dom)\s*(?:edu|com))))

RegEx有点复杂,可以容纳各种其他示例(数据集中的电子邮件模式)。您还可以在CodePad上运行和检查Python程序 - http://codepad.org/W2p6waBb

修改

只是为了给出一个相同的正则表达式的视角 - http://pythonregex.com/

1 个答案:

答案 0 :(得分:2)

看起来这里的具体问题是您需要使用原始字符串:

mail_re = r"(?:[a-zA-Z]+[\w+\.]+[a-zA-Z]+)\s*(?:@|\bat\b)\s*(?:(?:(?:(?:[a-zA-Z]+)\s*(?:\.|dot|dom)\s*(?:[a-zA-Z]+)\s*(?:\.|dot|dom)\s*)(?:edu|com))|(?:(?:[a-zA-Z]+\s*(?:\.|dot|dom)\s*(?:edu|com))))"

否则,例如\b将是退格而不是单词边界。

此外,您正在使用JavaScript测试人员。 Python有不同的语法和行为。为了避免意外,最好使用特定于Python的语法进行测试。