将非常长且复杂的版本号与 python 中的正则表达式匹配

matching very long and complex version numbers with regular expressions in python

我有很多这样的台词。

some text some more text v3.1.0-beta.4 more & more text
some text some v2 build.3 some more text more & more text
some text some v21.1.23456.551436a4 alpha.4 some more text v16.1.2 more & more text

版本号是:

v3.1.0-beta.4
v2 build 3
v21.1.23456.551436a4 alpha.4 and v16.1.2

问题是我的版本号中可以包含 beta 或 build 或两者都不包含。版本号的可变长度。

这是我现在拥有的,它只能匹配数字。

\d+(?:\.\d+)+

如何在给定行中搜索一个或多个版本号的存在,如上面的行所示?

您可以试试这个正则表达式:

\bv[\d+]+[\w.]*(?:[-\s]+(?:alpha|beta|build)[\w.]*)?

RegEx Demo

图案详情:

  • \bv:在单词边界
  • 之后匹配v
  • [\d+]+:匹配1+个数字或点字符
  • [\w.]*:匹配0个或多个字或点字符
  • (?:[-\s]+(?:alpha|beta|build)[\w.]*)?:以空格或连字符开头,可选择匹配 alpha|beta|build 部分后跟 0 个或多个单词或点字符