无节段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
相关产品推荐
相关产品推荐

