解析c#-regex中以下塊的最佳做法是什麼?正則表達式解析塊
BLOCK:1 {名稱:蘋果,值:果汁,名稱:XXX,值:YYY,名稱:蘋果,值:果汁}
BLOCK:2 {名稱:香蕉,值:氣味}
BLOCK:3 {}
編輯:靈活的塊
解析c#-regex中以下塊的最佳做法是什麼?正則表達式解析塊
BLOCK:1 {名稱:蘋果,值:果汁,名稱:XXX,值:YYY,名稱:蘋果,值:果汁}
BLOCK:2 {名稱:香蕉,值:氣味}
BLOCK:3 {}
編輯:靈活的塊
下面應該讓你的表達和羣體 '身份證', '名' 和 '價值' 的進一步使用。
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進一步信息
這可能是過於簡單,要求ANTLR的,但它不會傷害檢查出來以供將來參考。
如果您需要在所有相當複雜的解析什麼,那麼你就不能擊敗http://www.antlr.org/
,當然,它的相關的圖形用戶界面 - http://www.antlr.org/works/index.html
一張照片講千言萬語 - http://www.antlr.org/works/screenshots/editor.jpg
代碼更簡單,調試更簡單...
是的.. MGrammar是類似的項目antlr。 (http://msdn.microsoft.com/en-us/library/dd129519(VS.85).aspx)但我不知道在一個像例子中的小dsl ..我真的需要這個大型圖書館嗎? –
對不起。改變了問題。什麼時候我想要一些可擴展的塊名稱和值? –
'。+'是貪婪的,你可能想把它限制爲'\ w +'或'[^,}] +'。至少,把它變成一個非貪婪的'。+?'。 – Kobi
隨意編輯:-)協作網站等 –