【问题标题】:how to delete lines containing a string AND also NOT containing some other string?如何删除包含字符串且不包含其他字符串的行?
【发布时间】:2012-10-16 20:23:00
【问题描述】:

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

使用 Firefox firebug 扩展“css-usage”,我能够导出一个新的 css 文件,该实用程序在页面中未引用的每个类前面都添加了“UNUSED”。

我现在想删除所有包含 UNUSED 样式的样式,但是这样做有一些复杂性。即,某些标签与其他可能仍在使用的标签/选择器以逗号分隔,因此我不想删除任何包含逗号的行。其次,一些样式是在花括号中的长多行块中指定的,所以我不想删除任何没有右花括号'}'的行。

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

【问题讨论】:

    标签: regex


    【解决方案1】:

    匹配UNUSED不带逗号,并确保以}结尾:

    UNUSED [^,]*}
    

    【讨论】:

      【解决方案2】:

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

      (?=.*[,])
      

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

      (?!.*[,])
      

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

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

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

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

      我最熟悉 .NET,但我相信许多正则表达式引擎都有允许您指定 ^$ 是否匹配整个输入字符串的开头/结尾或字符串的开头/结尾的选项线。你会想要第二个选项。

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

      【讨论】:

        【解决方案3】:

        使用正则表达式

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

        带有多行修饰符。

        【讨论】:

          猜你喜欢
          • 2020-02-14
          • 1970-01-01
          • 2017-06-06
          • 2014-04-16
          • 2013-09-09
          • 1970-01-01
          • 2011-03-30
          • 2022-08-11
          相关资源
          最近更新 更多