正则表达式在程序中的异常行为

2024-09-29 03:37:53 发布

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

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

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

在用编程语言实现正则表达式之前,我通常使用RegexPal测试正则表达式。我在上一封邮件示例中观察到一个奇怪的行为。RegexPal向我显示了与regex的匹配,但是在Python程序中使用相同的regex时,它并没有给我带来任何帮助。原因是什么?你知道吗

 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/


Tags: 程序comhttp示例so电子邮件dotat
1条回答
网友
1楼 · 发布于 2024-09-29 03:37:53

这里的具体问题似乎是您需要使用原始字符串:

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将是backspace而不是word boundary。你知道吗

另外,您使用的是JavaScript测试仪。Python有不同的语法和行为。为了避免意外,最好使用Python特定的语法进行测试。你知道吗

相关问题 更多 >