【问题标题】:How can I express a multi-line regex in assertRegex in Python 3?如何在 Python 3 的 assertRegex 中表达多行正则表达式?
【发布时间】:2015-06-24 11:57:41
【问题描述】:

我正在使用 Python 3.4 中 unittest 库中的 assertRegex() function。它只需要两个相关参数:要匹配的文本和正则表达式。这似乎阻止我表达任何与正则表达式相关的常量,例如re.MULTILINE

如何构造或指定多行正则表达式并将其与assertRegex() 一起使用?或者,是否有解决我的问题的相关方法?

【问题讨论】:

    标签: python regex unit-testing python-3.x


    【解决方案1】:

    请参阅 Python 文档中的 here

    (?iLmsux)
    

    (来自集合'i','L','m','s','u','x'的一个或多个字母。)组匹配空字符串;这些字母设置了相应的标志:re.I(忽略大小写)、re.L(取决于区域设置)、re.M(多行)、re.S(点匹配所有)、re.U(取决于 Unicode)和re.X(详细),用于整个正则表达式。 (标志在模块内容中进行了描述。)如果您希望将标志作为正则表达式的一部分包含在内,而不是将标志参数传递给 re.compile() 函数,这将非常有用。

    请注意,(?x) 标志会更改表达式的解析方式。它应该首先在表达式字符串中使用,或者在一个或多个空白字符之后使用。如果标志前有非空白字符,则结果未定义。

    【讨论】:

    • 很好的答案,谢谢。我以为它可能是这样的,但找不到。如果您可以将链接添加回相关文档块,我会将其标记为已接受。
    • 右向中间 here 看起来他们在 Python 3 中添加了一些标志。
    • 对于那些原始答案不够的人 - 像我一样,这是一个例子:原始:r'^[0-9A-F]{8}$' 忽略大小写:r'(?i)^[0-9A-F]{8}$'
    【解决方案2】:

    一种方法是使用re.compile (Official Python 3 reference) 构造正则表达式。一个例子是

    self.assertRegex(str1, re.compile('\\bcd '+re.escape(os.getcwd())+'\n', re.M | re.I))
    

    这在表达式很复杂时很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多