2011-06-21 59 views
0

我有以下字符串,需要我通过正则表达式在C#中解析它。正则表达式模式C#

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

我想作为组中的groupcollection对象提取我们大胆的字符。

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

将消息模式是什么样的?

+0

你到目前为止有什么样的模式? – mdm

+0

作为参考,我发现这个网站很有用。当你得到一些符合条件的东西时,你会得到C#正则表达式http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx – tom502

回答

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); 
} 

问号在第一两组作出这样的量词懒惰:它会捕捉人物的尽可能少。换句话说,它捕获到它看到的第一个.。或者,您可以在这些组中使用([^.]+),这些组明确捕获除期间以外的所有内容。

最后一组显式只捕获十进制数字。如果您的表情在:的右侧可能有其他值,则您必须将其更改为.+

0

这应该给你你想要什么,不管它们之间有什么。

@"(?:.+\.){4}(.\w+)\.(\w+)\s?:\s?(\d+)" 
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); 
} 
+0

我通常这样做,但是我不能从他的描述中不会想到这些团体的好名声。 :) – Sven