首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我该怎么写这个.?

我该怎么写这个.?
EN

Stack Overflow用户
提问于 2020-09-19 21:59:53
回答 3查看 46关注 0票数 2

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

例如输入

代码语言:javascript
复制
input => (name, version)
abc_v0001 => (abc, 0001)
abc_v10000 => (abc, 10000)
abc_vwx_v0001 => (abc_vwx,1)
abc => (abc, null)

我试过这个..。

代码语言:javascript
复制
(.*)_v\(d*) 

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-19 22:05:07

您可以使用

代码语言:javascript
复制
^(.*?)(?:_v0*(\d+))?$

regex演示

详细信息

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

  • $ -字符串的末端。
票数 2
EN

Stack Overflow用户

发布于 2020-09-19 22:07:25

你可以试试:

代码语言:javascript
复制
(.*)_v([\d]*)

第一个捕获组是名称,第二个是版本。

代码语言:javascript
复制
() => capture result
.* => any character
_v => the string "_v" this should compensate for the special cases
[\d]* => any number of any digits 
票数 0
EN

Stack Overflow用户

发布于 2020-09-19 22:09:34

若要说某个字符(或一组字符)是可选的,请在其后面使用?

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63973747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档