2016-02-05 78 views
2

我想寫一個匹配「key = value」的正則表達式,直到行尾或表示註釋開始的符號。匹配行尾或其他字符

例如,讓「#」表示註釋,並假設我有一個包含文件中的以下內容:

k1 = v1 
k2 = v2 # this is a comment 
k3 = v3 

然後我想我則表達式匹配在「K1 = V1」,「K2 = V2」和「k3 = v3」。

我已經能夠使用,以配合沒有評論文字:

^(?'key'.+)\=(?'value'.+) 

的問題是,我無法弄清楚如何匹配,直到「#」或「\ n」

+1

@Tushar這根本不尋找評論或換行符。 – Rawling

回答

0

你的正則表達式,除了最後一個點罰款

^(?'key'.+)\=(?'value'[^#\n]+) 

如果用否定字符類[^#\ n]的更換,將工作

此外,如果鍵值對在同一個文件中(而不是逐行),您應該啓用多行模式,它可以在每行開頭匹配

in C#這成爲

var subjectString = @"k1 = v1 
k2 = v2 # this is a comment 
k3 = v3"; 

Regex regexObj = new Regex(@"^(?'key'.+)\=(?'value'[^#\n]+)", RegexOptions.Multiline); 
Match matchResult = regexObj.Match(subjectString); 
while (matchResult.Success) 
{ 
    Console.WriteLine(matchResult.Groups["key"].Value); 
    Console.WriteLine(matchResult.Groups["value"].Value); 
    matchResult = matchResult.NextMatch(); 
} 
相關問題