我正在尝试编写一个可以匹配“key = value”的正则表达式,直到行结束或表示注释开始的符号。
例如,让'#'表示注释,并假设我有一个包含以下内容的文件:
k1 = v1
k2 = v2 # this is a comment
k3 = v3
然后我希望我的表达式匹配“k1 = v1”,“k2 = v2”和“k3 = v3”。
我可以使用以下方式匹配文本而不添加评论:
^(?'key'.+)\=(?'value'.+)
问题是我无法弄清楚如何匹配直到'#'或'\ n'
答案 0 :(得分:0)
(?:^|(?<=\n))(?'key'.+?)\=(?'value'.+?(?=#|\n|$))
您可以使用lookarounds
来完成工作。见演示。
答案 1 :(得分:0)
你的正则表达式没有问题,除了最后一个点
^(?'key'.+)\=(?'value'[^#\n]+)
如果用替换的字符类[^#\ n]替换它,它将起作用
此外,如果键值对位于同一个文件中(而不是逐行),则应启用多行模式,以便^在每行开头匹配
在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();
}