捕获可选组
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+))?
详情
^
- 字符串开头
@
- 一个 @
字符
(\w+)
- 第 1 组:一个或多个单词字符
:
- 冒号
(\w+)
- 第 2 组:一个或多个单词字符
(?:.*?\|b=(\d+))?
- 一个可选的非捕获组匹配除换行符以外的任何 0+ 个字符,尽可能少,然后 |b=
然后将 1+ 个数字捕获到组 3
(?:.*?\|d=(\d+))?
- 一个可选的非捕获组匹配除换行符以外的任何 0+ 个字符,尽可能少,然后 |d=
然后将 1+ 位数字捕获到组 4
我想捕获一些可选的键的值,具体考虑下面的字符串
@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+))?
详情
^
- 字符串开头@
- 一个@
字符(\w+)
- 第 1 组:一个或多个单词字符:
- 冒号(\w+)
- 第 2 组:一个或多个单词字符(?:.*?\|b=(\d+))?
- 一个可选的非捕获组匹配除换行符以外的任何 0+ 个字符,尽可能少,然后|b=
然后将 1+ 个数字捕获到组 3(?:.*?\|d=(\d+))?
- 一个可选的非捕获组匹配除换行符以外的任何 0+ 个字符,尽可能少,然后|d=
然后将 1+ 位数字捕获到组 4