使用正则表达式重新实现功能

时间:2013-03-24 21:09:38

标签: python regex windows algorithm

version_from_path(path)的目的是返回Python安装的版本号,给定Windows系统上该安装的默认命名和目标根目录的绝对路径(例如'C:\PythonXX')。

def version_from_path(path):
    return "%s.%s" % (path[-2:-1], path[-1:])

作为一个例子......

print(version_from_path('C:\Python27'))
print(version_from_path('C:\Python32'))
print(version_from_path('C:\Python33'))

... ...产生

2.7
3.2
3.3

我目前正在使用切片表示法和格式化操作来实现所需的结果,但是我有兴趣看看如何使用正则表达式实现相同的功能。

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

import re

regex = re.compile( r"C:\\Python(\d)(\d)" )

def version_from_path_re(path):
  m = regex.match( path )
  if m:
    return ".".join( map( str, m.groups() ) )

答案 1 :(得分:0)

你可以这样做:

return re.sub(r".*?(\d)(\d)", r"\1.\2", path)

如果要捕获所有尾随数字并将点放在最后一位之前:

return re.sub(r".*?(\d*?)(\d)$", r"\1.\2", path)

答案 2 :(得分:0)

sys.version_info中可以轻松详细地提供版本号。

>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=3, releaselevel='final', serial=0)

答案 3 :(得分:0)

您可以搜索文件include/patchlevel.h

,而不是依赖文件夹名称本身
def version_from_path(path):
    with open(path + '/include/patchlevel.h') as f:
        m = re.search(r'#define\s+PY_VERSION\s+"(\d+\.\d+)', f.read())
        if m:
            return m.group(1)