正则表达式解析块

时间:2010-01-12 12:38:42

标签: c#

在c#-regex中解析以下块的最佳做法是什么?

  

BLOCK:1 {name:Apple,value:Juice,name:xxx,value:yyy,name:Apple,value:Juice}

     

BLOCK:2 {name:Banana,value:Smell}

     

BLOCK:3 {}

编辑:灵活的块

2 个答案:

答案 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

编码更简单,调试更简单......