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)
...
我在开发函数时遇到了一个小问题。
问题出在以下函数上。
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)
...