testfixtures.StringComparison不允许使用正则表达式标志

时间:2017-06-04 11:42:47

标签: regex python-3.x logging

我正在尝试捕获日志以进行测试,并使用python中的isDead模块通过正则表达式进行匹配,并通过testfixtures模块进行日志记录。

这是实际发生的事情的复制品:

logging

但是这段代码会出错并且不匹配。而且我无法将import logging, traceback from testfixtures import LogCapture, StringComparison exception = None try: raise Exception('test exception') except Exception as ex: exception = ex traceback_str = '\n'.join(traceback.format_exception(type(exception), exception, exception.__traceback__)) with LogCapture() as capture: logging.info(traceback_str) capture.check(('root', 'INFO', StringComparison(r'.*test exception.*'))) 标记放在regex中作为新行字符考虑re.DOTALL,因为它会对.的参数数量产生错误。

目前,作为一种解决方法,我正在使用以下正则表达式:

StringComparison

是否有其他方法可以提供标记来比较捕获的日志,或使用不同的函数检查日志?

1 个答案:

答案 0 :(得分:1)

您可以使用内联修饰符版本(?s),它等同于将re.DOTALL / re.S标记传递给正则表达式引擎:

r'(?s).*test exception.*'

请参阅re文档:

  

<强> (?aiLmsux)
  (集'a''i''L''m''s''u''x'中的一个或多个字母。 )该组匹配空字符串;字母设置相应的标志:re.A(仅限ASCII匹配),re.I(忽略大小写),re.L(依赖于语言环境),re.M(多行),对于整个正则表达式,re.S(点匹配所有)和re.X(详细)。 (这些标志在Module Contents中描述。)如果您希望将标志包含在正则表达式的一部分中,而不是将标志参数传递给re.compile(),这将非常有用。功能