C#如何提取文件中指定字符串后的所有匹配文本内容
解决方案
问题原因
原代码在foreach循环中首次匹配到目标内容后就直接调用return返回了单个结果,直接终止了后续遍历流程,因此只能拿到第一个匹配项。
调整后代码
// 返回值修改为字符串集合,用于存储所有匹配结果 public List<string> GetAllMatchContents(string filePath, string containString) { var result = new List<string>(); var allLines = File.ReadAllLines(filePath); // 筛选所有包含目标字符串的行 var matchLines = allLines.Where(line => line.Contains(containString)); foreach (var line in matchLines) { var splited = line.Split(new string[] { containString }, StringSplitOptions.None); // 防止索引越界,确认拆分后存在对应内容再添加 if (splited.Length >= 2) { // 去掉提取内容前后的多余空格和双引号,适配你的配置文件格式 result.Add(splited[1].Trim(' ', '"')); } } return result.Count > 0 ? result : null; }
代码说明
- 把原方法的返回值从单个
string修改为List<string>,可容纳任意数量的匹配结果 - 新增集合变量存储每次遍历得到的匹配内容,遍历完所有符合条件的行之后统一返回
- 增加了拆分后的长度判断,避免行内包含目标字符串但拆分后索引越界的异常
- 新增
Trim(' ', '"')逻辑,针对你提供的配置文件示例,调用时传入containString = "AccountName"就能直接得到["dummy1","dummy2"]的返回结果 - 修正了原代码中变量名
cotainstring的拼写错误,统一改为containString,可根据自己的实际变量名调整
内容的提问来源于stack exchange,提问作者ThatFriendlyAsianDev
相关产品推荐
相关产品推荐

