我有以下字符串,需要我通过正则表达式在C#中解析它。正则表达式模式C#
格式:rec_mnd.rate.current_rate.sum。 QWD.RET:214345
我想作为组中的groupcollection对象提取我们大胆的字符。
QWD = 1组 RET = 1组 214345 = 1组
将消息模式是什么样的?
我有以下字符串,需要我通过正则表达式在C#中解析它。正则表达式模式C#
格式:rec_mnd.rate.current_rate.sum。 QWD.RET:214345
我想作为组中的groupcollection对象提取我们大胆的字符。
QWD = 1组 RET = 1组 214345 = 1组
将消息模式是什么样的?
这将是这样的:
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);
}
问号在第一两组作出这样的量词懒惰:它会捕捉人物的尽可能少。换句话说,它捕获到它看到的第一个.
。或者,您可以在这些组中使用([^.]+)
,这些组明确捕获除期间以外的所有内容。
最后一组显式只捕获十进制数字。如果您的表情在:
的右侧可能有其他值,则您必须将其更改为.+
。
这应该给你你想要什么,不管它们之间有什么。
@"(?:.+\.){4}(.\w+)\.(\w+)\s?:\s?(\d+)"
请让自己变得更容易,并标记您的组,以便更容易理解代码中发生了什么。
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);
}
我通常这样做,但是我不能从他的描述中不会想到这些团体的好名声。 :) – Sven
你到目前为止有什么样的模式? – mdm
作为参考,我发现这个网站很有用。当你得到一些符合条件的东西时,你会得到C#正则表达式http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx – tom502