剥离不以某个前缀开头的每一行

时间:2012-04-30 12:00:47

标签: regex

我正在尝试创建一个正则表达式,它会删除所有不以某个前缀开头的行。使用this tip我想出了这个:

(?:(?!\nLAST-MODIFIED:[^\n]+\n).*)

这似乎无法正常工作。我究竟做错了什么?是的,我知道这将始终剥离第一行,无论它是否以LAST-MODIFIED:为前缀。但我很肯定第一行永远不会是LAST-MODIFIED:行,所以它应该是安全的。如果我想要完全安全的话,我建议的解决方案是(?:(?!(\n|^)LAST-MODIFIED:[^\n]+\n).*)

3 个答案:

答案 0 :(得分:4)

这会做你需要的吗?

(^(?!LAST-MODIFIED)[^\n]*)+

说明:

  • ^ - 匹配行的开头
  • (?!LAST-MODIFIED) - 检查它是否以上次修改后的
  • 开头
  • [^\n]* - 如果上述情况属实,则匹配所有内容,直至找到换行符
  • + - 重复

答案 1 :(得分:0)

编辑: - 哎呀,你想要的行不能以某个前缀开头。请参阅下面的编辑:

如果这不是通过多行检测内容,您可以使用grep:

轻松地执行此操作
grep -v -P "^LAST-MODIFIED:.*" oldfile > newfile

我建议将其换成新文件并进行检查,然后使用mv newfile oldfile将新文件移到旧文件上,而不是直接更改文件,以避免可能丢失数据。

答案 2 :(得分:0)

我不确定您使用的语言是什么,但在.NET / C#中这可行(已测试):

    Regex r = new Regex(@"^(LAST-MODIFIED\:).*$");
    Debug.WriteLine(r.Replace("LAST-MODIFIED:2012-01-01", ""));

^匹配行的开头,$匹配结束 句点/点“。”匹配除linebreak以外的任何字符的零次或多次出现