我有一个包含大量文本的文件,但在某些行上只有行:
sometext:someothertext
我想要的是保留这些线条。 我写了一个正则表达式,但这与我想要的完全相反:
[0-9a-zA-Z]+(:[0-9a-zA-Z]+)
还有几行有分隔符。我不需要保留这些。样本行将是:
这是一篇非常好的文章,内容是关于 sometext:someothertext
正则表达式如何才能获得包含sometext:someothertext
格式的行?
答案 0 :(得分:3)
您可以使用
^(?![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
结果是:
答案 1 :(得分:0)
这是一个反面的例子:
[^: \t]:[^: \t]
匹配度:
您可以向“非”字符类添加您想要排除的任何其他内容。
这是一个更积极的例子:
[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
如果你想匹配整行...你可以在正则表达式之前和之后使用.*
。