我有一个名为line的字符串,我想使用正则表达式解析它:
Regex pattern = new Regex(@"^(line|LINE) (?<lineNr>\d+): (word|WORD) (?<Key_1>\w+) ( (?<e>(e1|e2)) (?<Key_2>\w+))* (?<s>\w+)$");
if (pattern.IsMatch(line))
{
Match match = pattern.Match(line);
int lineNr = Int32.Parse(match.Groups["lineNr"].Value);
string Key_1 = match.Groups["Key_1"].Value;
string e = match.Groups["e"].Value;
string Key_2 = match.Groups["Key_2"].Value;
string s = match.Groups["s"].Value;
}
我不知道&#34; e&#34;和&#34; Key_2&#34;重复计数,我想将它们全部添加到数组中。 是否可以捕获所有这些?
//修改
Regex pattern = new Regex(@"^(line|LINE) (?<lineNr>\d+): (word|WORD) (?<Key_1>\w+) ( (?<e>(e1|e2)) (?<Key_2>\w+))* (?<s>\w+)$");
Match match = pattern.Match(line);
if(match.Success)
{
Regex p = new Regex(@" (?<e>(e1|e2)) (?<Key_2>\w+))");
MatchCollection matches = p.Matches(line);
foreach (Match m in matches)
{
string Key_2 = m.Groups["Key_2"].Value;
string e = m.Groups["e"].Value;
//add matches to array
}
int lineNr = Int32.Parse(match.Groups["lineNr"].Value);
string Key_1 = match.Groups["Key_1"].Value;
string s = match.Groups["s"].Value;
}
答案 0 :(得分:0)
这可能有效:
var newArray = pattern.Matches( line ).OfType<Match>.Select( m => new { e = m.Groups["e"].Value, Key_2 = m.Groups["Key_2"].Value } ).ToArray();