首页 > 解决方案 > 将非常长且复杂的版本号与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+)+

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

标签: pythonpython-3.xregexre

解决方案


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

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

正则表达式演示

图案细节:

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

推荐阅读