与条件正则表达式斗争

nat*_*vda 5 ruby regex

我有一个简单的问题,但我无法解决这个问题.我的字符串有一个格式ID: dddd,带有以下正则表达式:

/^ID: ([a-z0-9]*)$/
Run Code Online (Sandbox Code Playgroud)

或者如下:ID: 1234 Status: 232,所以使用以下正则表达式:

/^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
Run Code Online (Sandbox Code Playgroud)

现在我想制作一个可以处理两者的正则表达式.我想出的第一件事是:

/^ID: ([a-z0-9]*)$|^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
Run Code Online (Sandbox Code Playgroud)

它匹配,但我正在研究条件正则表达式,并且认为某些事情应该是可能的(伪编码)

if the string contains /Status:/
    /^ID: ([a-z0-9]*)$/
else
    /^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
Run Code Online (Sandbox Code Playgroud)

只是,我无法正确表达.我以为我应该使用,/?=/但不知道如何.就像是

/((?=Status)^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$|^ID: ([a-z0-9]*)$/
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

你能帮我吗?

Chr*_*ing 7

您正在寻找 ^ID: (\d+)(?: Status: (\d+))?$

编辑:因为这个问题被标记为Ruby,所以值得一提的是,根据 这个问题这种风味比较,Ruby不会做有条件的正则表达式.

http://www.regular-expressions.info是这个主题的一个很好的来源.