You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无节段INI文件的值修改、新增行及正则匹配问题求助

解决方案:修改无节段INI文件的值并新增行

问题分析

你的现有代码存在两个核心问题:

  • 正则表达式@"KeyOne=(?<Number>[\d\.]+)"仅匹配数字和小数点,当文本框输入包含空格、字母或特殊字符时,无法找到匹配项,导致修改失败。
  • 使用Remove和Insert手动操作字符串索引容易出错,尤其是当文件内容有变动时。

改进方案

以下是更可靠的实现方式,支持修改任意类型的值、保留原键的格式(如等号前后的空格),并能在指定键后新增行:

1. 修改指定键的值

使用正则表达式匹配键的完整行,保留键和等号的原有格式,替换值部分:

const string filepath = @"C:\Users\123\Desktop\Config.ini";
string text = File.ReadAllText(filepath);

// 修改KeyOne的值(支持任意类型输入,保留原格式)
string newKeyOneValue = Program.form1.textBox11.Text;
text = Regex.Replace(text, @"(KeyOne\s*=\s*).*", $"$1{newKeyOneValue}", RegexOptions.Multiline);

// 修改KeyMore的值
string newKeyMoreValue = "新的数字或文本";
text = Regex.Replace(text, @"(KeyMore\s*=\s*).*", $"$1{newKeyMoreValue}", RegexOptions.Multiline);

// 修改带空格的Key的值
string newKeyValue = "77777!";
text = Regex.Replace(text, @"(Key\s*=\s*).*", $"$1{newKeyValue}", RegexOptions.Multiline);

2. 在指定键后新增行

修改完Key的值后,直接在该行末尾添加新内容:

// 在Key的行后新增一行
text = Regex.Replace(text, @"(Key\s*=\s*" + Regex.Escape(newKeyValue) + @")", "$1\n新增的内容", RegexOptions.Multiline);

完整代码示例

const string filepath = @"C:\Users\123\Desktop\Config.ini";
string text = File.ReadAllText(filepath);

// 1. 修改KeyOne的值
string keyOneNewValue = Program.form1.textBox11.Text;
text = Regex.Replace(text, @"(KeyOne\s*=\s*).*", $"$1{keyOneNewValue}", RegexOptions.Multiline);

// 2. 修改KeyMore的值
string keyMoreNewValue = "1000"; // 可替换为文本框输入
text = Regex.Replace(text, @"(KeyMore\s*=\s*).*", $"$1{keyMoreNewValue}", RegexOptions.Multiline);

// 3. 修改Key的值并在其后新增行
string keyNewValue = "77777!"; // 可替换为文本框输入
// 先修改值
text = Regex.Replace(text, @"(Key\s*=\s*).*", $"$1{keyNewValue}", RegexOptions.Multiline);
// 再新增行
text = Regex.Replace(text, @"(Key\s*=\s*" + Regex.Escape(keyNewValue) + @")", "$1\n新增配置项=新值", RegexOptions.Multiline);

// 保存修改后的内容
File.WriteAllText(filepath, text);

关键说明

  • \s*:匹配任意数量的空格(包括0个),确保兼容键和等号之间有空格的情况(如Key = 88888*)。
  • .*:匹配等号后的任意内容(直到行尾),支持数字、文本、空格和特殊字符。
  • Regex.Escape():当新值包含正则特殊字符(如*、!)时,避免正则解析错误。
  • RegexOptions.Multiline:确保.*只匹配到当前行的末尾,而不是整个文件的结尾。

内容的提问来源于stack exchange,提问作者Jonson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:25:37