1

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

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

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

4

3 回答 3

5

这会做你需要的吗?

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

解释:

  • ^- 匹配一行的开头
  • (?!LAST-MODIFIED)- 检查它不是以 last-modified 开头
  • [^\n]*- 如果上述情况属实,则匹配所有内容,直到找到换行符
  • +- 重复
于 2012-04-30T12:14:48.537 回答
0

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

如果这没有检测到多行内容,您可以使用 grep 从 shell 轻松执行此操作:

grep -v -P "^LAST-MODIFIED:.*" oldfile > newfile

我建议将它导入一个新文件并检查它,然后将新文件移动到旧文件上,mv newfile oldfile而不是直接更改文件,以避免可能丢失数据。

于 2012-04-30T12:20:26.130 回答
0

我不确定您使用的是哪种语言,但在 .NET/C# 中可以使用(经过测试):

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

^ 匹配行首,$ 匹配行尾句点/点“.” 匹配零次或多次出现的除换行符以外的任何字符

于 2012-04-30T12:24:19.203 回答