【问题标题】:Regex keep all lines with delimiter (sublime)正则表达式用分隔符保留所有行(崇高)
【发布时间】:2016-12-22 23:43:29
【问题描述】:

我有一个包含大量文本的文件,但在某些行上只有:

sometext:someothertext

我想要的是保留这些线条。 我写了一个正则表达式,但这与我想要的完全相反:

[0-9a-zA-Z]+(:[0-9a-zA-Z]+)

还有几行带有分隔符。我不需要保留这些。示例行是:

这是一个很好的台词,讲述了 sometext:someothertext

正则表达式如何仅获取包含sometext:someothertext 格式的行?

【问题讨论】:

    标签: regex sublimetext2


    【解决方案1】:

    你可以使用

    ^(?![0-9a-zA-Z]+:[0-9a-zA-Z]+$).*$\R*
    

    这个表达式可以工作like this

    替换文本为空。

    模式详情

    • ^ - 行首(m 多行选项在 SublimeText 中是默认的)
    • (?![0-9a-zA-Z]+:[0-9a-zA-Z]+$) - 该行不应与模式匹配:1+ 字母数字后跟 : 和 1 或多个字母数字
    • .*$ - 匹配整行(甚至是空行)
    • \R* - 以及零个或多个换行符。

    如果我有以下文字:

    local06:local16
    TEXT local76:local16
    local06:local17
    local06:local19
    
    More TEXT local76:local678
    

    结果是:

    【讨论】:

    • 非常感谢!应有的工作!我不知道“不匹配”
    • (?!...) 构造称为negative lookahead。它里面的$ 告诉正则表达式引擎检查整行,否则,它只会在一行以您的模式开头的情况下匹配失败。
    【解决方案2】:

    这是一个反面例子:

    [^: \t]:[^: \t]
    

    匹配:

    1. 不是冒号、空格或制表符
    2. 冒号
    3. 不是冒号、空格或制表符

    您可以在“非”字符类中添加您想排除的任何其他内容。

    这是一个更积极的例子:

    [0-9A-Za-z]:[0-9A-Za-z]
    

    与 grep、awk 或 sed 一起使用,上面将匹配打印行:

    grep '[^: \t]:[^: \t]' foo.txt
    awk '/[^: \t]:[^: \t]/' foo.txt
    sed '/[^: \t]:[^: \t]/ p; d' foo.txt
    
    grep '[0-9A-Za-z]:[0-9A-Za-z]' foo.txt
    awk '/[0-9A-Za-z]:[0-9A-Za-z]/' foo.txt
    sed '/[0-9A-Za-z]:[0-9A-Za-z]/ p; d' foo.txt
    

    如果您想匹配整行...您可以在任一正则表达式之前和之后使用.*

    【讨论】:

      猜你喜欢
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2011-02-24
      • 1970-01-01
      • 2018-11-19
      • 2014-11-06
      • 2012-08-13
      相关资源
      最近更新 更多