慕田峪4524236
正则表达式有点难看,但它是:var str = @"line 1 //commentline2; test;extra text; //comment may also contain ;.";var matches = Regex.Matches(str, @"^(?:(?<!//).)+(;)", RegexOptions.Multiline);if (matches.Count > 0){ Console.WriteLine(matches[matches.Count - 1].Groups[1].Index);}我们得到每行中最后一个分号的匹配项(前面没有注释),然后我们查看这些匹配项中的最后一个。我们必须逐行执行此操作,因为注释适用于整行。如果您想单独处理每一行(您的问题没有说明这一点,但它暗示了这一点),然后循环matches而不是只查看最后一行。如果你想用另一个字符替换每个分号,那么你可以这样做:const string replacement = "#";var result = Regex.Replace(str, @"^((?:(?<!//).)+);", "$1" + replacement, RegexOptions.Multiline);如果您想完全删除它,那么只需:var result = Regex.Replace(str, @"^((?:(?<!//).)+);", "$1", RegexOptions.Multiline);如果您只想删除整个字符串中的最后一个分号,那么您可以使用string.Remove:var matches = Regex.Matches(str, @"^(?:(?<!//).)+(;)", RegexOptions.Multiline);if (matches.Count > 0){ str = str.Remove(matches[matches.Count - 1].Groups[1].Index, 1);}