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+))
-a\u v
子字符串\u v
-零个或更多0*
字符0
-捕获组2:任何一个或多个数字(\d+)
-字符串结束$
(.*)_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将是版本(如果存在)