Regex 如何为这个…编写正则表达式。。。?

Regex 如何为这个…编写正则表达式。。。?,regex,Regex,给定一个格式为someName\u v0001的字符串,如何编写一个正则表达式,该正则表达式可以给出名称(v之前的位)和版本(v之后的位),其中版本后缀是可选的 e、 g.对于输入 input => (name, version) abc_v0001 => (abc, 0001) abc_v10000 => (abc, 10000) abc_vwx_v0001 => (abc_vwx,1) abc => (abc, null) 我试过这个 (.*)_v\(d*)

给定一个格式为
someName\u v0001
的字符串,如何编写一个正则表达式,该正则表达式可以给出名称(v之前的位)和版本(v之后的位),其中版本后缀是可选的

e、 g.对于输入

input => (name, version)
abc_v0001 => (abc, 0001)
abc_v10000 => (abc, 10000)
abc_vwx_v0001 => (abc_vwx,1)
abc => (abc, null)
我试过这个

(.*)_v\(d*) 
。。。但是我不知道如何处理可选版本后缀的情况。

您可以使用

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

详细信息

  • ^
    -字符串的开头
  • (.*)
    -捕获组1:除换行符以外的任何零个或多个字符,尽可能少
  • (?:_v0*(\d+))
    -一个可选的
    • \u v
      -a
      \u v
      子字符串
    • 0*
      -零个或更多
      0
      字符
    • (\d+)
      -捕获组2:任何一个或多个数字
  • $
    -字符串结束
您可以尝试:

(.*)_v([\d]*)
第一个捕获组是name,第二个是version

() => capture result
.* => any character
_v => the string "_v" this should compensate for the special cases
[\d]* => any number of any digits 
要说一个字符(或一组字符)是可选的,请在其后面使用

例如,
ABC?
将同时匹配“AB”和“ABC”,而
AB(CD)?
将同时匹配“AB”和“ABCSD”

我假设您也希望使版本的“_v”部分成为可选的。在这种情况下,您需要将其包含在一个非捕获组中,
(?:)
,这样您就可以使用
将其设置为可选,而不必捕获它

适用于您的场景的正确正则表达式是
(.*)(?:\u v(\d+))
。捕获组1将是名称,捕获组2将是版本(如果存在)