提取两字符串间子串触发ArgumentOutOfRangeException问题求助
解决Selenium提取Profile ID时的ArgumentOutOfRangeException问题
我帮你定位到了两个核心问题,以及对应的修复方案:
问题1:结束匹配字符串错误
你当前使用的结束符"\","和页面源码里的实际格式不匹配。看你的页面源码片段:
window.__additionalDataLoaded('/username1/',{"logging_page_id":"profilePage_10216","logging_page_username": "username1"})
profilePage_10216后面的内容是","(也就是"+,+"),但你代码里写的"\","实际对应的是","(少了一个闭合双引号),这直接导致IndexOf(end)返回-1,触发后续的截取异常。
问题2:GetInbetween方法无边界校验
你的自定义方法没有处理找不到起始/结束标记、结束标记在起始标记之前这些异常场景,当IndexOf返回-1时,直接进行字符串截取必然抛出ArgumentOutOfRangeException。
修复方案
第一步:修正结束匹配字符串
把调用代码里的结束符改成"\",\"",匹配源码里的","格式:
var source = GetSource(); var username = "username1"; Console.WriteLine("Here: " + source.GetInbetween( "window.__additionalDataLoaded('/" + username + "/',{\"logging_page_id\":\"", "\",\"" // 修正后的结束符 ));
第二步:改造GetInbetween方法,添加完整校验
给方法加上边界检查,避免无效的截取操作:
public static string GetInbetween(this string s, string start, string end) { // 先检查输入参数合法性 if (string.IsNullOrWhiteSpace(s) || string.IsNullOrWhiteSpace(start) || string.IsNullOrWhiteSpace(end)) return null; int startIndex = s.IndexOf(start); // 找不到起始标记,直接返回null if (startIndex == -1) return null; int startPos = startIndex + start.Length; // 从起始标记之后的位置开始找结束标记,避免匹配到无关内容 int endIndex = s.IndexOf(end, startPos); // 结束标记不存在,或者位置在起始标记之前,返回null if (endIndex == -1 || endIndex <= startPos) return null; // 用Substring更直观,也可以用C#8+的范围运算符:s[startPos..endIndex] return s.Substring(startPos, endIndex - startPos); }
进阶方案:用JSON解析替代字符串匹配
字符串匹配很容易因为页面源码的微小变化(比如空格、换行、属性顺序调整)失效,更可靠的方式是提取JSON部分后解析:
using System.Text.Json; var source = GetSource(); var username = "username1"; var startStr = $"window.__additionalDataLoaded('/{username}/',"; var endStr = ");"; // 先提取JSON片段 var jsonPart = source.GetInbetween(startStr, endStr); if (!string.IsNullOrWhiteSpace(jsonPart)) { // 解析JSON获取Profile ID var jsonDoc = JsonDocument.Parse(jsonPart); var profileId = jsonDoc.RootElement.GetProperty("logging_page_id").GetString(); Console.WriteLine("Profile ID: " + profileId); // 输出 profilePage_10216 }
内容的提问来源于stack exchange,提问作者user5405648
相关产品推荐
相关产品推荐

