正则表达式保留所有带分隔符的行(崇高)

Regex keep all lines with delimiter (sublime)

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

sometext:someothertext

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

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

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

This is a very nice line saying stuff about sometext:someothertext

仅包含 sometext:someothertext 格式的行的正则表达式看起来如何?

您可以使用

^(?![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

结果是:

这是一个反面例子:

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

匹配:

  1. 不是冒号,space 或制表符
  2. 冒号
  3. 不是冒号,space 或制表符

您可以向 "not" 字符添加 class(es) 任何您想要排除的其他内容。

这是一个更正面的例子:

[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

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