正则表达式模式C#

时间:2011-06-21 16:12:46

标签: c# regex

我有以下字符串,需要我通过C#中的Regex解析它。

  

格式:rec_mnd.rate.current_rate.sum。 QWD.RET:214345

我想将粗体字符作为groupcollection中的组对象提取。

QWD = 1组 RET = 1组 214345 = 1组

消息模式会是什么样的?

3 个答案:

答案 0 :(得分:2)

这将是这样的:

string s = "Format: rec_mnd.rate.current_rate.sum.QWD.RET : 214345";
Match m = Regex.Match(s, @"^Format: rec_mnd\.rate\.current_rate\.sum\.(.+?)\.(.+?) : (\d+)$");
if( m.Success )
{
    Console.WriteLine(m.Groups[1].Value);
    Console.WriteLine(m.Groups[2].Value);
    Console.WriteLine(m.Groups[3].Value);
}

前两组中的问号使得量词变得懒惰:它将捕获尽可能少的字符数。换句话说,它会捕获直到它看到的第一个.。或者,您可以在这些组中使用([^.]+),这些组明确捕获除句点之外的所有内容。

最后一组明确仅捕获十进制数字。如果您的表达式在:的右侧可以包含其他值,则您还必须将其更改为.+

答案 1 :(得分:1)

请让自己更轻松一些,并标记您的群组,以便更容易理解代码中发生的事情。

RegEx myRegex = new Regex(@"rec_mnd\.rate\.current_rate\.sum\.(?<code>[A-Z]{3})\.(?<subCode>[A-Z]{3})\s*:\s*(?<number>\d+)");

var matches = myRegex.Matches(sourceString);
foreach(Match match in matches)
{
    //do stuff
    Console.WriteLine("Match");
    Console.WriteLine("Code:    " + match.Groups["code"].Value);
    Console.WriteLine("SubCode: " + match.Groups["subCode"].Value);
    Console.WriteLine("Number:  " + match.Groups["number"].Value);
}

答案 2 :(得分:0)

这应该可以为你提供你想要的东西,而不管它是什么。

@"(?:.+\.){4}(.\w+)\.(\w+)\s?:\s?(\d+)"