C#正则表达式捕获组

时间:2015-09-14 01:35:44

标签: c# regex

试图绕过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>.*))?

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

Regex Demo