【问题标题】:How to endorse that a string is a version of something or not? [duplicate]如何认可一个字符串是否是某物的一个版本? [复制]
【发布时间】:2019-10-14 16:53:06
【问题描述】:

仅供参考,不重复请删除此标签。

我已经尝试过packaging.version.Version,它在1.0.2h192.168.0.3 上不起作用。

问题

我正在列表中获取不同库/二进制文件的版本。这个列表包括一些版本的垃圾值以及正确的值。我想编写一个python代码,可以将正确的从版本列表中分离出来。

请推荐一个可以执行以下操作的逻辑或python库

伪代码

Correct_verList = []

verList = ['2.6.36', '1.2.dfgdf', '1.sdfsdgsdsf', '3.0/0+3*/1,-/0/0,//O*K1', 'so.802', '5.0(side)', '6.2*20hm' , '192.168.0.222', '1.33', '0.97a', '1.0.2h', '2.4.2b3']

#Psuedo Code
for ver in verList: 
    if ver is the correct version:
         Correct_verList.append(ver)

print(Correct_verList)

预期输出

Correct_verList = [1.33, 0.97a, 2.6.36, 1.0.2h, 2.4.2b3]

【问题讨论】:

  • @DeveshKumarSingh 亲爱的,它是不同的,因为它是找出一个字符串是否是版本。和你建议的版本比较。
  • 如果您再次查看答案version.Version("1.3.xy123") 检查字符串是否为有效版本
  • packaging.version.Version 似乎不允许1.0.2h
  • packaging.version.Version192.168.0.12 是一个版本,实际上它不是一个版本。
  • 由于重复而无法添加答案,但如果您的要求是非常具体的数字,后跟句点,后跟字母和数字的组合,可选地后跟句点和 a 的组合字母和数字,你可以用正则表达式来解决它,比如import re; result = [x for x in verList if re.fullmatch('\d+\.\w+(\.\w+)?', x)]

标签: python string


【解决方案1】:

您要查找的内容称为regular expression。此链接为您提供有关 python 正则表达式的文档。

这个正则表达式可以完成这项工作:'(([0-9]+[.]){1,2}([0-9]*([0-9]|[a-z]){0,2}[0-9]+)'

您可以做的是使用findall() 方法并测试结果是否与您测试的字符串相同。代码就像(我还没有测试过):

import re
Correct_verList = []

verList = ['2.6.36', '3.0/0+3*/1,-/0/0,//O*K1', 'so.802', '5.0(side)', '6.2*20hm' , '192.168.0.222', '1.33', '0.97a', '1.0.2h', '2.4.2b3']

for ver in verList:
    a=re.findall('(([0-9]+[.]){1,2}([0-9]*([0-9]|[a-z]){0,2}[0-9]+)',ver)
    if len(a)!=0:
       if a[0][0]==ver:
           Correct_verList.append(ver)
print(Correct_verList)

【讨论】:

  • 那个正则表达式不能满足他的所有要求。请注意,字母可以包含在最后一段中。
  • @tfw 你说得对,最后一段字符也是可以的
  • @Umair 已更正。是否符合您的要求?
  • @TUIlover 代码有错误。
  • @Umair 已更正。不过,你没有解释为什么 192.168.0.12 不应该在列表中,我的代码也没有排除它
猜你喜欢
  • 2014-07-23
  • 2017-08-23
  • 2020-06-12
  • 1970-01-01
  • 2013-05-12
  • 2015-02-24
  • 2015-07-10
  • 2010-10-13
相关资源
最近更新 更多