正则表达式产生一个不正确的结果
Regex producing one incorrect result
我对一个特定的正则表达式感到困惑(我非常接近,但还不能克服最后一个障碍。
我需要从名称略有不同的 git 分支系列中提取分支类型和 "initiative"。分支类型进入第 1 组,倡议进入第 2 组。版本以 "v" 开头或根本没有。
想要的 Inputs/Outputs 是:
branchname | group 1 | group 2
release/v1.2.3 | release | ""
release/1.2.3 | release | ""
release/foo-v1.2.3 | release | foo
release/foo-1.2.3 | release | foo
我当前的正则表达式是:(release)\/(\w*)-?(?=v?\d+\.\d+\.\d*)
这会产生以下 Inputs/Outputs:
branchname | group 1 | group 2
release/v1.2.3 | release | "v" <--- Problem!
release/1.2.3 | release | ""
release/foo-v1.2.3 | release | foo
release/foo-1.2.3 | release | foo
我的问题是我只有 v1.2.3
。如果可以的话,我不想返回并更改分支名称(由于很久以前的决定,我们有很多名称为 release/vX.Y.Z
的分支)。
我在 Linux 系统上使用 Ant 来处理这个正则表达式,所以我相信我需要遵循 Java 规则。
谢谢!
你是超级接近!尝试将 ?
附加到第二个匹配组,如下所示:
(release)\/(\w*?)-?(?=v?\d+\.\d+\.\d*)
您最好将可选 属性 应用于整个 \w+-
模式:
(release)\/(?:(\w+)-)?v?\d+(?:\.\d+)*
看来你也不需要前瞻。
我对一个特定的正则表达式感到困惑(我非常接近,但还不能克服最后一个障碍。
我需要从名称略有不同的 git 分支系列中提取分支类型和 "initiative"。分支类型进入第 1 组,倡议进入第 2 组。版本以 "v" 开头或根本没有。
想要的 Inputs/Outputs 是:
branchname | group 1 | group 2
release/v1.2.3 | release | ""
release/1.2.3 | release | ""
release/foo-v1.2.3 | release | foo
release/foo-1.2.3 | release | foo
我当前的正则表达式是:(release)\/(\w*)-?(?=v?\d+\.\d+\.\d*)
这会产生以下 Inputs/Outputs:
branchname | group 1 | group 2
release/v1.2.3 | release | "v" <--- Problem!
release/1.2.3 | release | ""
release/foo-v1.2.3 | release | foo
release/foo-1.2.3 | release | foo
我的问题是我只有 v1.2.3
。如果可以的话,我不想返回并更改分支名称(由于很久以前的决定,我们有很多名称为 release/vX.Y.Z
的分支)。
我在 Linux 系统上使用 Ant 来处理这个正则表达式,所以我相信我需要遵循 Java 规则。
谢谢!
你是超级接近!尝试将 ?
附加到第二个匹配组,如下所示:
(release)\/(\w*?)-?(?=v?\d+\.\d+\.\d*)
您最好将可选 属性 应用于整个 \w+-
模式:
(release)\/(?:(\w+)-)?v?\d+(?:\.\d+)*
看来你也不需要前瞻。