正则表达式匹配字符串中的最后一个字符 - C#

如何删除最后一个';' 在一个字符串中?


如果在字符串末尾有注释,我需要返回 ';' 在评论之前。


示例:


"line 1 //comment

line2;

extra text; //comment may also contain ;." 


www说
浏览 604回答 2
2回答

斯蒂芬大帝

你没有写你想对这个角色做什么,所以我在这里给你一个替换角色的解决方案:string pattern = "(?<!//.*);(?=[^;]*(//|$))";Console.WriteLine(Regex.Replace("line 1 //comment", pattern, "#"));Console.WriteLine(Regex.Replace("line2;", pattern, "#"));Console.WriteLine(Regex.Replace("extra; text; //comment may also contain ;.", pattern, "#"));输出:line 1 //commentline2#extra; text# //comment may also contain ;.

慕田峪4524236

正则表达式有点难看,但它是:var str = @"line 1 //commentline2; test;extra text; //comment may also contain ;.";var matches = Regex.Matches(str, @"^(?:(?<!//).)+(;)", RegexOptions.Multiline);if (matches.Count > 0){&nbsp; &nbsp; 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){&nbsp; &nbsp; str = str.Remove(matches[matches.Count - 1].Groups[1].Index, 1);}
打开App,查看更多内容
随时随地看视频慕课网APP