捕获可选组

Capture optional Group

我想捕获一些可选的键的值,具体考虑下面的字符串

@Foo1:dog|a=5|b=6|c=10|d=12|e=2
@Foo2:cat|a=12|c=10|d=11|e=123
@Foo1:bat|a=213123|b=10
@Foo3:pet|c=346

现在我想捕获@和:、:和|之间的字符串,以及键b、d的值,这可能是可选的。 我应该捕获以下内容

Foo1, dog, 6, 12
Foo2, cat, 11
Foo1, bat, 10
Foo3, pet

我正在使用这个正则表达式 ^@(\w+):(\w+).*(?:b=(\d+)).*(?:d=(\d+)) 但只有当 b 和 d 都存在时才有效。

您可以使用

^@(\w+):(\w+)(?:.*?\|b=(\d+))?(?:.*?\|d=(\d+))?

regex demo

详情

  • ^ - 字符串开头
  • @ - 一个 @ 字符
  • (\w+) - 第 1 组:一个或多个单词字符
  • : - 冒号
  • (\w+) - 第 2 组:一个或多个单词字符
  • (?:.*?\|b=(\d+))? - 一个可选的非捕获组匹配除换行符以外的任何 0+ 个字符,尽可能少,然后 |b= 然后将 1+ 个数字捕获到组 3
  • (?:.*?\|d=(\d+))? - 一个可选的非捕获组匹配除换行符以外的任何 0+ 个字符,尽可能少,然后 |d= 然后将 1+ 位数字捕获到组 4