在我的数据框中,我有一些不符合 PEP440 的版本集(尽管其中一些可以被
packaging.Version
解析)。数据框看起来像这样(我已经列出了大多数不符合 PEP440 正则表达式的格式)。版本很奇怪,因为这是实时抓取的 API 数据。
id api_spec_id info_version
473 583 1.0.2-SNAPSHOT
474 583 1.0.5-SNAPSHOT
475 580 v1alpha2
476 580 v1beta
477 580 v1dev3
479 581 0.9.0-dev
480 581 2.0.0-alpha7
481 581 0.0.2-beta
482 581 3.0.0_tag
480 585 2016-12-01
481 585 2017-01-03
479 586 1.PreR15.0.0
481 587 stable
482 588 2020-08-20T12:57:36Z
479 589 beta
480 589 datatransfer_v1
481 590 1.0.0-oas3
482 590 1.0.1-oas3
我想对数字和标签进行基本比较,并检查每个标签的版本升级,例如,如果我们有
v1.2.3
< v1.3.0
-这应该在minor
下
我们有
x.y
,x.y.z
或x.y.z.p
版本格式,有时他们有tags
:alpha
,beta
,rc
等标签可以简单地标记为pre
。因此,如果在两个版本之间,假设1.2.3
和1.3.4
,minor
和patch
发生了变化,因此它被标记为minor.patch
。部分规则如下(p
代表微观,x.y.z
:major.minor.patch
):
x.y
变化:major.minor
y.z
变化:minor.patch
x.z
变化:major.patch
x.p
变化:major.micro
以及所有其他情况的类似命名。我不确定输出结果,因为我从来没有在
major.minor.patch
方案之外进行过比较,但或多或少我希望输出类似于这样:
id api_spec_id info_version label
473 583 1.0.2-SNAPSHOT -
474 583 1.0.5-SNAPSHOT patch.snapshot
475 580 v1alpha2 pre
476 580 v1beta pre
477 580 v1dev3 pre
479 581 0.9.0-dev -
480 581 2.0.0-alpha7 pre
481 581 0.0.2-beta pre
482 581 3.0.0_tag major
480 585 2016-12-01 -
481 585 2017-01-03 major.minor.patch
479 586 1.PreR15.0.0 epoch(for unknown versioning)
481 587 stable epoch
482 588 2020-08-20T12:57:36Z epoch
479 589 beta alphabet(if only letters found)
480 589 datatransfer_v1 epoch
481 590 1.0.0-oas3 -
482 590 1.0.1-oas3 patch
如果正则表达式在这种情况下可以工作,我会被卡住,因为它可能会变得有点复杂或正则表达式和
packaging.Version
的组合(因为一些版本被解析为所需的格式并且可以与major.minor.patch
进行比较) .另一种选择是split
并在版本之间进行比较。
我最初的想法是将版本更改为可解析的格式,但是这在我的分析中引入了偏差,因为许多其他标签都被忽略了,导致一个特定标签的结果更可取(例如
major.minor
)。
如有任何帮助,我们将不胜感激!我必须补充一点,我以前从未处理过这种代码,我会尝试提供我所拥有的任何信息(如果需要更多信息),但是弄清楚这段代码的
logic
,是我需要的建议。