查找号码并替换+ 1

时间:2019-04-11 03:20:50

标签: regex visual-studio-code

我有一个大文件,其中包含对象的列表,这些对象的页面#即递增

[
{page: 1},
{page: 2},
{page: 3}
]

我可以在vscode的ctrl + f查找器中用page: #找到page: (\d)的每个实例。我将如何用#+1替换这些数字?

3 个答案:

答案 0 :(得分:1)

使用正则表达式无法执行算术运算。我使用LINQPad执行这些小型脚本。下面的c#程序中提供了一个示例。

actualreturndate

我还自由地将您的正则表达式更改为以下内容。

void Main()
{
    var basePath = @"C:\";

    // Get all files with extension .cs in the directory and all its subdirectories.
    foreach (var filePath in Directory.GetFiles(basePath, "*.cs", SearchOption.AllDirectories))
    {
        // Read the content of the file.
        var fileContent = File.ReadAllText(filePath);

        // Replace the content by using a named capture group.
        // The named capture group allows one to work with only a part of the regex match.
        var replacedContent = Regex.Replace(fileContent, @"page: (?<number>[0-9]+)", match => $"page: {int.Parse(match.Groups["number"].Value) + 1}");

        // Write the replaced content back to the file.
        File.WriteAllText(filePath, replacedContent);
    }
}

答案 1 :(得分:0)

使用emmet的内置命令之一可以在vscode中轻松完成此操作:

Emmet: Increment by 1
  1. 使用正则表达式查找文件中的所有page: \d+
  2. Ctrl - Shift - L 选择所有出现的情况。
  3. 触发Emmet: Increment by 1命令。

这是一个演示:

Emmet:Increment buy 1

答案 2 :(得分:0)

您可以按照以下步骤在Ruby中进行操作。

FileIn  = "in"
FileOut = "out"

文件让我们构造一个示例文件(包含37个字符)。

File.write FileIn, "[\n{page: 1},\n{page: 2},\n{page: 33}\n]\n"
  #=> 37

我们现在可以读取输入文件FileIn,将其转换并将其写入新文件FileOut

File.write(FileOut, File.read(FileIn).
     gsub(/\{page: (\d+)\}/) { "{page: #{$1.next}}" })

让我们看看所写的内容。

puts File.read(FileOut)
[
{page: 2},
{page: 3},
{page: 34}
]

我已经吞下了整个文件,进行了内存更改并吐出了修改后的文件。如果原始文件很大,则可以轻松地对其进行修改,以逐行读取和写入文件。