【问题标题】:Python 2.7 regex gets version from drupalPython 2.7 正则表达式从 drupal 获取版本
【发布时间】:2016-08-04 09:49:29
【问题描述】:
def GetVersionPlugsThemes(url):
    data = exlib.GetDataFromURL(url)
    regex = "Drupal \s*?([\d.]+),"
    pattern = re.compile(regex,re.MULTILINE)
    result =  re.findall(pattern,data)
    result = list(set(result))
    return result   
print GetVersionPlugsThemes("https://daa.uit.edu.vn/CHANGELOG.txt")

结果:

['7.14', '7.15', '7.16', '7.17', '7.10', '7.11', '7.12', '7.13', '7.18', '7.19', '7.2', '7.3 '、'7.0'、'6.4'、'7.6'、'7.7'、'7.4'、'7.5'、'1.0.0'、'7.8'、'7.9'、'6.9'、'6.8'、'4.0 .0'、'4.5.7'、'4.5.1'、'4.7.2'、'4.7.3'、'4.7.0'、'4.7.1'、'4.7.6'、'4.7.7 '、'4.7.4'、'4.7.5'、'4.7.8'、'4.7.9'、'4.5.5'、'4.5.0'、'6.7'、'4.5.2'、'4.5 .3'、'4.5.4'、'4.5.6'、'4.6.11'、'6.6'、'4.5.8'、'4.6.10'、'6.5'、'7.1'、'4.3.2 ','4.3.0','4.3.1','6.3','6.2','7.32','7.33','7.30','7.31','7.36','7.37','7.34', '7.35'、'7.38'、'7.39'、'4.1.0'、'4.7.10'、'4.7.11'、'7.29'、'7.28'、'7.25'、'7.24'、'7.27'、 '7.26'、'7.21'、'7.20'、'7.23'、'7.22'、'2.0.0'、'7.50'、'5.23'、'5.22'、'5.21'、'5.20'、'4.6.4 ','3.0.0','3.0.1','6.19','6.18','6.13','6.12','7.41','7.40','6.17','6.16','6.15', '7.44'、'5.12'、'5.13'、'5.10'、'5.11'、'5.16'、'5.17'、'5.14'、'5.15'、'5.18'、'5.19'、'5.0'、'5.1 ','5.2','5.3','5.4','5.5','5.6','5.7','5.8','5.9','6.1','7.43','7.42','6.11', “6.10”、“6.0”、“4.6.9”、“4.6” .8','4.6.7','4.6.6','4.6.5','6.14','4.6.3','4.6.2','4.6.1','4.6.0', '4.4.1'、'4.4.0'、'4.4.3'、'4.4.2'、'4.2.0'、'6.22'、'6.20'、'6.21']

如何获取最新版本-“7.50”?谢谢。

【问题讨论】:

  • 你必须迭代列表

标签: regex python-2.7


【解决方案1】:

因为这是一个变更日志文件,所以最后的版本总是第一个匹配。

def GetVersionPlugsThemes(url):
    data = exlib.GetDataFromURL(url)
    regex = "Drupal \s*?([\d.]+),"
    pattern = re.compile(regex,re.MULTILINE)
    iter =  re.finditer(pattern,data)
    return iter.next().group(1)

print GetVersionPlugsThemes("https://daa.uit.edu.vn/CHANGELOG.txt")

结果:7.50

【讨论】:

    【解决方案2】:

    您也可以使用列表对象的sort 方法对映射为整数的数值进行排序,并获取结果列表的最后一项:

    t = ['7.14', '7.15', '7.16', '7.17', '7.10', '7.11', '7.12', '7.13', '7.18', '7.19', '7.2', '7.3', '7.0', '6.4', '7.6', '7.7', '7.4', '7.5', '1.0.0', '7.8', '7.9', '6.9', '6.8', '4.0.0', '4.5.7', '4.5.1', '4.7.2', '4.7.3', '4.7.0', '4.7.1', '4.7.6', '4.7.7', '4.7.4', '4.7.5', '4.7.8', '4.7.9', '4.5.5', '4.5.0', '6.7', '4.5.2', '4.5.3', '4.5.4', '4.5.6', '4.6.11', '6.6', '4.5.8', '4.6.10', '6.5', '7.1', '4.3.2', '4.3.0', '4.3.1', '6.3', '6.2', '7.32', '7.33', '7.30', '7.31', '7.36', '7.37', '7.34', '7.35', '7.38', '7.39', '4.1.0', '4.7.10', '4.7.11', '7.29', '7.28', '7.25', '7.24', '7.27', '7.26', '7.21', '7.20', '7.23', '7.22', '2.0.0', '7.50', '5.23', '5.22', '5.21', '5.20', '4.6.4', '3.0.0', '3.0.1', '6.19', '6.18', '6.13', '6.12', '7.41', '7.40', '6.17', '6.16', '6.15', '7.44', '5.12', '5.13', '5.10', '5.11', '5.16', '5.17', '5.14', '5.15', '5.18', '5.19', '5.0', '5.1', '5.2', '5.3', '5.4', '5.5', '5.6', '5.7', '5.8', '5.9', '6.1', '7.43', '7.42', '6.11', '6.10', '6.0', '4.6.9', '4.6.8', '4.6.7', '4.6.6', '4.6.5', '6.14', '4.6.3', '4.6.2', '4.6.1', '4.6.0', '4.4.1', '4.4.0', '4.4.3', '4.4.2', '4.2.0', '6.22', '6.20', '6.21']
    t.sort(key=lambda s: map(int, s.split('.')))
    print(t[-1])
    

    Python 2.7 demo

    作为替代方案,您可以在sort 中使用理解:

    t.sort(key=lambda x: [int(n) for n in x.split(".")])
    

    another Python demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多