我有以下字符串,需要我通过C#中的Regex解析它。
格式:rec_mnd.rate.current_rate.sum。 QWD.RET:214345
我想将粗体字符作为groupcollection中的组对象提取。
QWD = 1组 RET = 1组 214345 = 1组
消息模式会是什么样的?
答案 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+)"