代码之家  ›  专栏  ›  技术社区  ›  Micah

匹配除指定正则表达式以外的所有内容

  •  1
  • Micah  · 技术社区  · 14 年前

    这是我的正则表达式:

    "Id":\d+
    

    我怎么说“匹配所有东西” 除了 "Id":\d+ ". 类似于

    !("Id":\d+) (pseudo regex) ?

    我想用Regex替换函数。我想用英语说:

    “Id”:\d+ 并将其替换为和空字符串。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Ahmad Mageed    14 年前

    试试这个:

    string path = @"c:\temp.txt"; // your file here
    string pattern = @".*?(Id:\d+\s?).*?|.+";
    Regex rx = new Regex(pattern);
    
    var lines = File.ReadAllLines(path);
    using (var writer = File.CreateText(path))
    {
        foreach (string line in lines)
        {
            string result = rx.Replace(line, "$1");
            if (result == "")
                continue;
    
            writer.WriteLine(result);
        }
    }
    

    该模式将保留多个 同一行上的引用。如果你只有一个 Id 每行可以删除 \s? File.CreateText 将打开并覆盖现有文件。如果替换结果为空字符串,则将跳过它。否则结果将写入文件。

    模式的第一部分匹配 Id:编号 事件。它包括一个替代的 .+ 匹配线条在哪里 Id:编号 不会出现。替换使用 $1 身份证件 零件: (Id:\d+\s?)

        2
  •  1
  •   Brad Mace Mike King    14 年前

    \d \D

        3
  •  1
  •   splash    14 年前

    对不起,我完全不明白你的问题是什么。把这些匹配项放到一个新文件里不是很容易吗?

    获取所有非“Id”:\d+的文本,并将其替换为和空字符串。

    逻辑等价物是:

    "Id":\d+ 并将其放入新文件中。用新文件替换旧文件。

        4
  •  0
  •   Hemang    14 年前

    System.out.println("abcd Id:12351abcdf".replaceAll(".*(Id:\\d+).*","$1"));
    

    产生输出

    Id:12351