0

的目的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

4 回答 4

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() ) )
于 2013-03-24T21:16:14.910 回答
0

你可以这样做:

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

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

return re.sub(r".*?(\d*?)(\d)$", r"\1.\2", path)
于 2013-03-24T21:20:25.003 回答
0

版本号可以在sys.version_info中轻松且详细地获得。

>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=3, releaselevel='final', serial=0)
于 2013-03-24T22:32:58.210 回答
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)
于 2013-03-25T10:54:50.417 回答