为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
www说 2022-10-23 15:11:16
如何删除最后一个';' 在一个字符串中?如果在字符串末尾有注释,我需要返回 ';' 在评论之前。示例:"line 1 //commentline2;extra text; //comment may also contain ;." 
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

你没有写你想对这个角色做什么,所以我在这里给你一个替换角色的解决方案:


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 //comment

line2#

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


查看完整回答
反对 回复 2022-10-23
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

正则表达式有点难看,但它是:


var str = @"line 1 //comment


line2; 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);

}


查看完整回答
反对 回复 2022-10-23
  • 2 回答
  • 0 关注
  • 600 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号