【发布时间】:2011-11-28 08:48:14
【问题描述】:
我在文本文件中有收藏:
(Collection
(Item "Name1" 1 2 3)
(Item "Simple name2" 1 2 3)
(Item "Just name 3" 4 5 6))
集合也可以为空:
(Collection)
项目数未定义。它可以是一件或一百件。通过之前的提取,我在 Collection 元素之间已经有了内部文本:
(Item "Name1" 1 2 3)(Item "Simple name2" 1 2 3)(Item "Just name 3" 4 5 6)
如果是空集合,它将是空字符串。
如何使用 .Net 正则表达式解析这个集合?
我试过了:
string pattern = @"(\(Item\s""(?<Name>.*)""\s(?<Type>.*)\s(?<Length>.*)\s(?<Number>.*))*";
但是上面的代码并没有产生任何实际的结果。
更新:
我尝试以不同的方式使用正则表达式:
foreach (Match match in Regex.Matches(document, pattern, RegexOptions.Singleline))
{
for (int i = 0; i < match.Groups["Name"].Captures.Count; i++)
{
Console.WriteLine(match.Groups["Name"].Captures[i].Value);
}
}
或
while (m.Success)
{
m.Groups["Name"].Value.Dump();
m.NextMatch();
}
【问题讨论】:
-
@Michele Virgilio:在输出中我想提取所有项目,例如名称、类型、长度和数字
-
所以你只需要解析 (Item "Name1" 1 2 3)(Item "Simple name2" 1 2 3)(Item "Just name 3" 4 5 6) 而不是整个字符串跨度>
-
我认为离开多行解析会更好