【问题标题】:Delete all lines starting with # or ; in Notepad++删除所有以 # 或 ; 开头的行在记事本++
【发布时间】:2011-03-03 20:10:19
【问题描述】:

使用 Notepad++,如何删除所有以 # 或 ; 开头的行?

【问题讨论】:

  • 选择所有以#开头的行:#.*

标签: regex notepad++


【解决方案1】:

查找:

^[#;].*

什么都没有。 ^ 表示一行的开头,[#;] 是一个匹配#; 的字符类,.* 匹配行中的任何其他内容。

在 6.0 之前的 Notepad++ 版本中,由于其正则表达式引擎的限制,您将无法实际删除这些行;替换会导致匹配的每一行出现空白行。换句话说,这是:

# 富 ;酒吧 陈述;

会变成:

陈述;

但是,如果您将 \r\n\r\n 添加到模式的末尾,替换将在 Notepad++ 6.0 中起作用,具体取决于您的文件使用哪一行结尾,结果是:

陈述;

【讨论】:

  • 您可以使用“扩展”搜索模式并查找 \r\n\r\n 来替换空行。如果您将“替换为”留空,您将删除空行。请小心,因为这将删除您第一次替换未创建的其他空白行。
  • 从 notepad++ 6 开始,完全支持 PCRE 正则表达式,搜索 ^(#|;).*\r\n 并替换为空白(当然启用了正则表达式选项)完美工作跨度>
  • @Tao:谢谢你的提醒——我忘了​​用 6.0 支持更新我所有的 Notepad++ 答案!我会尽快解决的...
  • np,我刚刚选择了你,因为当我在 google 中搜索与“notepad++ 正则表达式”相关的内容时,这个答案在前三个结果中(尽管我现在无法重现搜索)。我今天偶然发现了这个 PCRE 支持,让我很开心。
  • 在 Notepad++ 的当前版本中(不知道从什么时候开始),\R 匹配 \r\n、\r 和 \n。
【解决方案2】:

正如其他人所指出的,在 Notepad++ 6.0 及更高版本中,可以使用“替换”功能删除所有以“;”开头的行或“#”。

Tao 提供了一个正则表达式作为起点,但它不考虑“;”之前可能存在的空白或给定行上的“#”字符。例如,以“;”开头的行或者“#”但是在使用Tao的正则表达式^(#|;).*\r\n时不会被删除。

Tao 的正则表达式也没有考虑 BoltClock 回答中提到的警告:跨系统换行符的差异。

一个改进是使用^(\s)*(#|;).*(\r\n|\r|\n)?,它解释了前导空格和换行符的差异。此外,结尾的? 处理文件最后一行以#; 开头但不以换行符结尾的情况。

对于好奇的人,可以辨别给定文档中使用了哪种类型的换行符(并且可以使用多种类型):查看 -> 显示符号 -> 显示行尾。

【讨论】:

  • 您建议的正则表达式似乎无法找到文档的最后一行(如果它是相关行)。
  • 不错的收获,@maja!尝试将? 附加到末尾,如下所示:^(\s)*(#|;).*(\r\n|\r|\n)?。我将相应地更新原始答案。谢谢!
【解决方案3】:

这是可能的,但不是直接的。

简而言之,去搜索,使用您的正则表达式,检查“标记线”并单击“查找全部”。它会为所有这些行生成书签。

在搜索菜单中有一个点“删除书签行”瞧。

我在这里找到了答案(正确答案是第二个,不是公认的!): How to delete specific lines on Notepad++?

【讨论】:

    【解决方案4】:

    也许你应该试试

    ^[#;].*$
    

    ^ 匹配开头,$ 结尾。

    【讨论】:

    【解决方案5】:

    在 Notepad++ 中,您可以使用“查找”对话框中的“标记”选项卡将与您的查询匹配的所有行添加为书签,可以是正则表达式或普通(通配符)。

    然后使用搜索 > 书签 > 删除书签行。

    【讨论】:

    • stema 已经写过相同的答案,但您在此处的答案信息要少得多。虽然为旧问题添加新答案可能很好,但它们只有在提供新信息时才有用。只是重复其他答案的答案没有价值,它们只是杂乱无章。
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2014-05-07
    相关资源
    最近更新 更多