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>.*))?

谢谢。

C# Regex capturing groups

您应该使用更严格的令牌而不是否定,使用可选的非捕获组:

@(?:msg=(?<msg>'w+);?)?(?:name=(?<name>'w+))?'s*(?<rest>.*)

Regex演示