我编写了以下正则表达式来匹配 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))))
正则表达式有点复杂,无法容纳各种其他示例(数据集中找到的电子邮件模式)。您还可以在 CodePad 上运行和检查 Python 程序 - http://codepad.org/W2p6waBb
编辑
只是为了给出一个相同的正则表达式适用于的视角 - http://pythonregex.com/
最佳答案
看起来这里的具体问题是您需要使用原始字符串:
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 特定的语法进行测试。
关于python - 程序中的 RegEx 异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857362/