【问题标题】:Using regex to trim trailing white space使用正则表达式修剪尾随空格
【发布时间】:2018-04-07 12:58:10
【问题描述】:

我的编辑器EditpadPro 允许我创建语法着色方案。 我正在编写的方案包括跨越 "--" 到行尾的 cmets。

我想要一个从 "--" 开始但在最后一个非空白字符处停止的正则表达式。我不能使用“替换”,因为我只是输入正则表达式,而不是自己使用它。

所以,如果我的代码行中的文本是:

X=1 -- This is a comment with trailing blanks

然后正则表达式将返回:

-- This is a comment with trailing blanks

这样做的原因是我可以将尾随空格突出显示为浪费空间。

【问题讨论】:

    标签: regex editpad


    【解决方案1】:

    我不熟悉 EditPad Pro,但是

    --(?:.*\S)?
    

    可能会起作用。

    这个想法是匹配--,后跟0个或多个任意(非换行符)字符(.),后跟一个非空格字符(\S)。因为“0 或更多”部分是贪婪的,它会尝试匹配尽可能多的行,从而使\S 匹配该行的最后一个非空白字符。

    ? 使-- 之后的整个内容成为可选。这是因为您的评论中可能没有非空格字符:

    --
    

    这仍应匹配为注释,但不能匹配任何尾随空格(如果有)。

    【讨论】:

    • 我不明白为什么它应该被否决 - 它工作得非常好。
    • 感谢您的建议。我很难理解第一个的(?:.*\S) 部分。这是一个前瞻性,不是吗?但我以前没有遇到过。我不认识: 字符的功能。第二个的解释很容易,即使对我来说也是如此。但我永远不会将该解释放入语法着色方案编辑器的元素评论框中!
    • @Swifty:不,是non-capturing group。它将.*\S 组合成一个单独的标记,后面的? 将其全部设为可选。
    • 感谢非捕获组的解释。我昨晚搜索了regex (?:,第一次点击说新手可能会将此混淆为前瞻。那就让我代替我吧。
    【解决方案2】:

    在语法着色方案编辑器中,使用以下正则表达式,确保未选中“全部点”复选框:

    --.*?(?=[^\r\n\S]*$)
    

    说明:

    --           # Match --
    .*?          # Match any number of non-linebreak characters, as few as possible,
    (?=          # until the following can be matched from the current position:
     [^\r\n\S]*  # Any number of whitespace characters except newlines
     $           # followed by the end of the line.
    )            # End of lookahead
    

    [^\S]\s 相同,但取反的 character class 允许您从允许的空白字符类中排除某些字符 - 在本例中为换行符。

    【讨论】:

    • 我也很好奇。我对 sGeeK 的“答案”投了反对票,但显然有人也对我们的两个人投了反对票(作为报复?)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2012-02-24
    相关资源
    最近更新 更多