【问题标题】:regex to remove everything after a certain character (comment)正则表达式删除某个字符后的所有内容(评论)
【发布时间】:2011-10-30 06:56:39
【问题描述】:

我有一个正则表达式,用于删除特定字符分号之后的所有内容。

        var regex = new Regex(@";(.*)", RegexOptions.Singleline);
        tb.Text = regex.Replace(tb.Text, "");

它似乎工作正常,但有时它会删除文本框的整个文本。例如,所有这些代码都被删除:

;fgkdfgdfgd
;dfgdfkghdfgdf
;sdgfsdfsdfsdf
;dfgdfgdfg

#dont remove this          ;fgdfgdfg

“#dont remove this”应该保持不变,因为它不在分号之后,但不是吗?我的正则表达式有问题吗?

这个想法是从文件中删除或修剪所有 cmets。

【问题讨论】:

    标签: c# regex line character


    【解决方案1】:

    尝试(评论后更新):

    tb.Lines = (
        from l in tb.Lines 
        let x = l.IndexOf (';') 
        select (x >= 0 ? l.SubString (0, x) : l)
    ).ToArray();
    

    这也应该比 Regex 运行得更快...

    【讨论】:

    • 我没有投反对票,但 StackOverflow 的目标是回答这个问题。提供替代解决方案只是次要的,只能用于更好地提供好的答案。
    • @Scott Rippey 我不明白你在哪里收集的。有时提供一个更简单、更有效的解决方案绝对是要走的路。许多学习新技能的人试图用新技能解决每一个问题,引导人们朝着正确的方向前进并不超出 SO 的范围。让代码做大部分的谈话,所以这是有形的东西,而不仅仅是文字......
    • @John Leidegren:当我有一个编程问题时,我会寻找其他提出类似问题的人。如果他们接受的答案是“以不同的方式做”,那与“没关系,修复它”一样有用。 SO 更多的是寻找答案而不是提出问题。
    【解决方案2】:

    这是因为您使用的是RegexOptions.Singleline,因此. 正在匹配新行。

    【讨论】:

      【解决方案3】:

      RegexOptions.Singleline 不会像您预期的那样将匹配限制为一行。事实上,它的目的恰恰相反。它允许. 元字符匹配换行符,从而更容易找到跨越多行的匹配项。放下它,你应该会没事的。

      【讨论】:

        【解决方案4】:

        问题很简单——你误解了RegexOptions.SingleLine

        SingleLine 告诉模式. 可以匹配换行符。 Read more about RegexOptions here.

        您当前的结果是单个匹配项(从第一个 ; 到整个字符串的末尾)。

        您只需删除RegexOptions.SingleLine,您的模式就会将每条评论匹配到行尾。

        【讨论】:

        • 哦,我明白了。是的,我对 SingleLine 和 MultiLine 感到困惑。另外,如何删除所有以评论开头的行?
        • MultiLine 不是必需的——它改变了^$ 的含义。您当前的模式可以很好地清除以评论开头的行 - 但如果您想删除以评论开头的行,那是另一个问题。
        【解决方案5】:

        你可以用这个很容易做到:

        tb.Text = tb.Text.Substring(0, tb.Text.IndexOf(';'));
        

        这应该比使用 Regex 运行得更快...

        如果你的文本框是多行的,你可以使用:

        s = TextBox1.Text;
        string ret = "";
        s.Split('\n').ToList().ForEach(p=>ret += p.Substring(0, p.IndexOf(';')) + "\n");
        TextBox1.Text = ret;
        

        【讨论】:

        • 会产生同样的空结果!
        • @Yahia:我刚刚尝试过确定 "#dont remove this" 字符串仍然存在...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-09
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多