如何使正则表达式解析c#中的可选片段

时间:2015-03-18 10:02:20

标签: c# .net regex

我有以下字符串,其中包含u,c,m,p组: u5684c76431m33290p55030352942b366a1ca6b310 我需要通过以下方式进行分割:

 Regex regex = new Regex("regex here");
 foreach (Match match in regex.Matches(source))
 switch (match.Groups[1].Value.ToLower())
 {
 case "u":
 // u logic here
 break;
 case "c":
 //c  logic here
 ...

有下一个条件:

  • 群组是可选的
  • 除" p"之外的所有群组是整数
  • " P"是数字+字母(guid 24 chars length)
  • 群组的顺序可以是随机的

请帮我制作一个正则表达式。

- 更新:有时候" p" group可以是整数。

1 个答案:

答案 0 :(得分:2)

如果您坚持采用正则表达式方法,可以尝试使用此正则表达式:

(?:(?<class>p)(?<value>[A-Za-z0-9]{24})|(?<class>u|c|m)(?<value>[0-9]+))

在C#代码中,它可能类似于:

 var rx = new Regex(@"(?:(?<class>p)(?<value>[A-Za-z0-9]{24})|(?<class>u|c|m)(?<value>[0-9]+))", RegexOptions.CultureInvariant| RegexOptions.Compiled);
 for (Match m = rx.Match(source); m.Success; m = m.NextMatch())
 { 
     var class = m.Groups["class"].Value;
     var value = m.Groups["value"].Value;
 }