# Deliberately not anchored to the start and end of the string, to make it
# easier for 3rd party code to reuse
VERSION_PATTERN = r"""
v?
(?:
(?:(?P<epoch>[0-9]+)!)? # epoch
(?P<release>[0-9]+(?:\.[0-9]+)*) # release segment
(?P<pre> # pre-release
[-_\.]?
(?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
[-_\.]?
(?P<pre_n>[0-9]+)?
)?
(?P<post> # post release
(?:-(?P<post_n1>[0-9]+))
|
(?:
[-_\.]?
(?P<post_l>post|rev|r)
[-_\.]?
(?P<post_n2>[0-9]+)?
)
)?
(?P<dev> # dev release
[-_\.]?
(?P<dev_l>dev)
[-_\.]?
(?P<dev_n>[0-9]+)?
)?
)
(?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
"""
我也有同样的问题。这是我能找到的最彻底的正则表达式模式。PEP440在其参考部分中链接到打包库的代码库。在
要只访问模式字符串,可以使用全局
^{pr2}$参见:https://github.com/pypa/packaging/blob/16.7/packaging/version.py#L159
当然,这个例子是特定于Python的regex风格的。在
我认为这应该符合PEP440:
解释
Epoch,例如
^{pr2}$2016!
:版本部件(主要、次要、修补程序等):
可接受的分隔符(}):
.
,-
或{可能的预发布标志(及其规范化;以及发布后标志
r
或rev
)后面可能有一个或多个数字:发布后标志和一个或多个数字:
相关问题 更多 >
编程相关推荐