python - 程序中的 RegEx 异常行为

标签 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))))

正则表达式有点复杂,无法容纳各种其他示例(数据集中找到的电子邮件模式)。您还可以在 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/

相关文章:

python - 使用 scipy.integrate.quad 时为 "argument must be a callable function"

python - 正则表达式 python + 变量

Java:正则表达式检查字符串中的 http 链接

java - 为 Scanner 方法编写模式

python - 为什么 time.strptime ("Sept. 30, 2014", "%b. %d, %Y") 不工作

python : mock an attribute or mock the whole class?

python - 不要提交超过 11 点的时间 :59 pm

Python正则表达式匹配不在引号之间的某些字符

javascript - 将字符串清理为 JSON

java - 匹配不以日期开头的行