如何删除包含字符串的行并且还不包含其他字符串?

时间:2012-10-16 20:23:00

标签: regex

我需要一些正则表达式帮助。

使用Firefox firebug扩展“css-usage”,我能够将一个新的css文件导出到该页面中未引用的每个类的“UNUSED”前面。

我想现在删除包含UNUSED样式的每个样式,但是有一些复杂性。也就是说,某些标签用逗号分隔,其他标签/选择器仍然可以使用,因此我不想删除任何带有逗号的行。其次,一些样式在花括号中的长多行块中指定,所以我不想删除任何没有结束花括号'}'的行。

我正在使用mac,因此任何使用SED或AWk或vi的解决方案都是可以接受的。我想删除一个以“UNUSED”开头并且不包含逗号的css文件中的所有行,并且必须有一个结束'}'大括号。

3 个答案:

答案 0 :(得分:0)

要测试字符串是否包含字符而不捕获该字符或向前移动指针,请使用前瞻。

(?=.*[,])

或者,为了确保字符串不包含该字符,请使用否定前瞻。

(?!.*[,])

如果您想确保字符串不包含字符但包含其他字符,则可以将消极和正面前瞻结合起来。

(?!.*[,])(?=.*[}])(?=.*UNUSED)

最后,要实际选择发生此匹配的整个字符串,请在前瞻后使用。*。

^(?!.*[,])(?=.*[}])(?=.*UNUSED).*$

我对.NET很熟悉,但我相信很多正则表达式引擎都有一些选项可以指定^$是否匹配整个输入字符串的开头/结尾或开头/结束一行。你想要第二个选择。

最后,您可以使用正则表达式替换来将与给定表达式匹配的行替换为空字符串(从而“删除”这些行)。

答案 1 :(得分:0)

要匹配UNUSED没有逗号,并确保它以}结尾:

UNUSED [^,]*}

答案 2 :(得分:0)

使用正则表达式

^UNUSED[^,]*}[^,]*$

使用多行修饰符。