You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET C# 用正则匹配多系统换行符删除//行尾注释失效问题

问题根源

在.NET的正则实现中,RegexOptions.Multiline模式下的$锚点仅识别\n作为行终止标记,单独的\r不会被判定为行结束位置。之前使用的//.*$会贪婪匹配从//开始直到下一个\n前的所有字符,中间的\r以及\r之后到\n之前的内容都会被整体匹配替换,最终导致包含\r的后续行内容丢失。
正向预查的写法因为没有正确覆盖所有换行场景的匹配边界,也无法达到兼容三种换行格式的效果。

解决方案

使用排除字符组匹配//之后所有非换行符的内容,不需要依赖Multiline模式即可自动适配\r、\n、\r\n三种换行格式,且不会吃掉换行符本身。
正则表达式改为://[^\r\n]*

修改后的完整代码如下:

public static class CommentRemover
{
    private static readonly Regex RegexRemoveLineEndComment =
        new Regex(@"//[^\r\n]*");
    public static string RemoveLineEndComment(this string text)
    {
        return RegexRemoveLineEndComment.Replace(text, string.Empty);
    }
}
效果验证

使用提供的测试代码运行后,输出结果完全符合预期:
txt = "int rn = 0; \r\nint r = 0; \rint n = 0; \nend"

注意:该正则仅适用于代码中不存在字符串内容包含//的场景,如果需要处理字符串、正则字面量中的//避免误删,需要搭配语法解析器实现,无法仅通过单条正则完成精确匹配。

内容的提问来源于stack exchange,提问作者cheny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:06:01