在c#-regex中解析以下块的最佳做法是什么?
BLOCK:1 {name:Apple,value:Juice,name:xxx,value:yyy,name:Apple,value:Juice}
BLOCK:2 {name:Banana,value:Smell}
BLOCK:3 {}
编辑:灵活的块
答案 0 :(得分:1)
以下内容应该为您提供表达式和组'id','name'和'value'以供进一步使用。
BLOCK:(?<id>[0-9+]) { name:(?<name>.+), value:(?<value>.+) }
然后你可以用换行符拆分块,并尝试用正则表达式解析每一行,然后在成功匹配的情况下处理它们。
Regex pattern = new Regex("BLOCK:(?<id>[0-9]+) { name:(?<name>.+), value:(?<value>.+) }");
foreach(var line in block.Split('\n'))
{
Match match = pattern.Match(line);
if(match.Success)
{
Process(match.Groups["value"].Value);
}
}
修改强>
使用类似BLOCK:(?<id>[0-9]+) {(?<inner>.+)}
的内容进行第一场比赛。
然后查看this question了解更多信息
答案 1 :(得分:1)
这可能太简单了,不需要Antlr,但检查出来以备将来参考也没有什么坏处。
如果你需要解析任何相当复杂的事情,那么你就无法击败http://www.antlr.org/
当然,它是相关的GUI - http://www.antlr.org/works/index.html
一张图片说千言万语 - http://www.antlr.org/works/screenshots/editor.jpg
编码更简单,调试更简单......