C# Regex capturing groups
本文关键字:groups capturing Regex | 更新日期: 2023-09-27 18:12:39
试图理解Regex capturing groups
,遇到了一点麻烦。
我有一些字符串,我想为它们捕获组:
@msg=hello;name=test 1 // Groups: msg = hello, name = test, rest = 1
@msg=hi 2 // Groups: msg = hello, name = null, rest = 2
@name=tt 3 // Groups: msg = null, name = tt, rest = 3
我有以下regex
:
msg=(?P<msg>[^;]+)?.*name=(?P<name>[^;]+)?'s(?P<rest>.*)
对于第一行可以正常工作,但对于第二行或第三行则不行。知道我怎么才能让他们也这么做吗?我试着在捕获组周围放一些()?
,但无济于事:
// Below gets me weird results
(msg=(?P<msg>[^;]+)?)?.*(name=(?P<name>[^;]+)?)?'s((?P<rest>.*))?
谢谢。
您应该使用更严格的令牌而不是否定,使用可选的非捕获组:
@(?:msg=(?<msg>'w+);?)?(?:name=(?<name>'w+))?'s*(?<rest>.*)
Regex演示