【问题标题】:Python regular expression not raising exception inside header.pyPython 正则表达式不会在 header.py 中引发异常
【发布时间】:2018-11-28 11:07:13
【问题描述】:

我的客户看起来像这样->

from email.mime.multipart import MIMEMultipart
b = MIMEMultipart()
b['a'] = "Hello"
b['b'] = "--\nhttp://www.stallergenes.com/images/STAL_mail.png"
b.as_string()

这会调用 generator.py 中的函数 _write_headers

这个 generator.py 调用 header.py 中的 encode 方法

header.py 中的编码函数如下所示 ->

def encode(self, splitchars=';, \t', maxlinelen=None, linesep='\n'):
    _embedded_header = re.compile(r'\n[^ \t]+:')
    print 'value in header.py is -> %s, %s, %s' %(value, type(value), _embeded_header.pattern, _embeded_header.search(value))
    if _embedded_header.search(value):
        raise HeaderParseError("header value appears to contain "
            "an embedded header: {!r}".format(value))
    return value

在 python2.7 中,这是我在 docker 容器中的 header.py 文件。

header.py 中打印语句的值-> --\nhttp://www.stallergenes.com/images/STAL_mail.png, \n[^ \t]+:, None

所以基本上,它应该是匹配的。为什么它没有与这个正则表达式匹配?

【问题讨论】:

  • 如果print 的输出是--\nhttp://www.stallergenes.com/images/STAL_mail.png,那么您确实没有value 中有换行符。否则,'\n' 将显示为换行符。显然您的'\n' 实际上是'\\n'
  • 但是为什么它不坏呢?它也适用于“Cecilia Alarcon 12:01 PM:\n(y):D”、“失败的监视器包括:\nFreeWheel: 2018-03-25”、“Anoka Stake Center\n6:30 & 7”等输入:30pmCT"

标签: python regex python-2.7


【解决方案1】:

\n 匹配新行。我不认为这是你的目的。如果您通过添加 \ 来逃避它,它应该可以工作-

\\n[^ \t]+:

【讨论】:

  • OP 在"--\nhttp://www.stallergenes.com/images/STAL_mail.png" 中有一个换行符,它不是\n 字符的序列。
  • @WiktorStribiżew 我应该改变什么?这是因为一些原始字符串输入吗?我尝试使用 header.py 中的另一个输入值是 -> BUENAS TARDES。\nLES MANDO LOS REPORTES DE JL\nNOTA: SIN PAROS, , None search --- -1 header.py 中的代码是什么像这样... print 'header.py 中的值是 -> %s, %s, %s' %(value, type(value), _embeded_header.search(value)) print 'searching --- %s' % (value.find('\n'))
  • @KartikThakurela 抱歉,我无法重现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2022-11-14
  • 2017-04-04
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多