首页 > 解决方案 > 我该如何为此编写正则表达式...?

问题描述

给定格式中的字符串someName_v0001,我如何编写一个正则表达式,它可以给我名称(_v 之前的位)和版本(_v 之后的位),其中版本后缀是可选的。

例如对于输入

input => (name, version)
abc_v0001 => (abc, 0001)
abc_v10000 => (abc, 10000)
abc_vwx_v0001 => (abc_vwx,1)
abc => (abc, null)

我试过这个...

(.*)_v\(d*) 

...但我不知道如何处理可选版本后缀的情况。

标签: regex

解决方案


您可以使用

^(.*?)(?:_v0*(\d+))?$

请参阅正则表达式演示

细节

  • ^- 字符串的开始
  • (.*?)- 捕获组 1:尽可能少的除换行符以外的任何零个或多个字符
  • (?:_v0*(\d+))?- 一个可选的序列
    • _v- 一个_v子串
    • 0*- 零个或多个0字符
    • (\d+)- 捕获组 2:任意一位或多位数字
  • $- 字符串结束。

推荐阅读