我有一个大文件,其中包含对象的列表,这些对象的页面#即递增
[
{page: 1},
{page: 2},
{page: 3}
]
我可以在vscode的ctrl + f查找器中用page: #
找到page: (\d)
的每个实例。我将如何用#+1替换这些数字?
答案 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
page: \d+
。Emmet: Increment by 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}
]
我已经吞下了整个文件,进行了内存更改并吐出了修改后的文件。如果原始文件很大,则可以轻松地对其进行修改,以逐行读取和写入文件。