Python re 的版本问题

Python Version issue with re

我在开发函数时遇到了一个小问题。

问题出在以下函数上。

def clean_file(filename, file_lines):
    file_lines = re.sub(CRYPTO_RE, subst, file_lines, re.DOTALL)
    file_lines = re.sub(REMOVE_RE, subst, file_lines, re.DOTALL)
    file_lines = re.sub(BANNER_RE, subst, file_lines, re.DOTALL)
    return get_hostname_from_file(filename, file_lines)

我正在 2.7 系统上开发,但它最终会在 2.6 系统上 运行。无法升级2.6系统,因为它是用来干别的的

在 2.6 上,您只需执行 re.DOTALL,但在 2.7 系统上,您必须包含 flags=re.DOTALL 才能使其正常工作。

我可以降级我的 python 版本以匹配生产系统,但我想以编程方式解决这个问题并通过编码解决问题。授予降级将是更实际的答案。

有没有办法在 运行 启用函数之前进行 python 版本检查?

我相信类似

断言 sys.version_info == (2,6)

应该可以...但是我只有运行3.x

您可以先编译正则表达式并将标志传递给re.compile。返回的对象将有一个 sub 方法,该方法的行为应该适当(就像在 python2.7 中传递了标志一样)。这在 python2.7 和 python2.6 上表现相同 IIRC:

CRYPTO_RE = re.compile(..., flags=re.DOTALL)
...  # Other regex's compiled here too.

def clean_file(filename, file_lines):
    file_lines = CRYPTO_RE.sub(subst, file_lines)
    ...