将非常长且复杂的版本号与 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.]*)?
图案详情:
\bv
:在单词边界 之后匹配v
[\d+]+
:匹配1+个数字或点字符
[\w.]*
:匹配0个或多个字或点字符
(?:[-\s]+(?:alpha|beta|build)[\w.]*)?
:以空格或连字符开头,可选择匹配 alpha|beta|build
部分后跟 0 个或多个单词或点字符
我有很多这样的台词。
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.]*)?
图案详情:
\bv
:在单词边界 之后匹配[\d+]+
:匹配1+个数字或点字符[\w.]*
:匹配0个或多个字或点字符(?:[-\s]+(?:alpha|beta|build)[\w.]*)?
:以空格或连字符开头,可选择匹配alpha|beta|build
部分后跟 0 个或多个单词或点字符
v