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

如何用正则表达式提取用户名?正则提取报对象引用未找到异常

解决从指定字符串提取用户名的问题

首先咱们先聊聊你遇到的Object reference not found异常为啥会出现:你的代码里用了LastOrDefault(),如果正则没找到任何匹配项,这个方法会返回null,这时候直接调用ToString()自然就触发空引用异常了。而且原正则匹配的是所有括号内的内容,拿到的会是@[Username]而不是纯用户名,也不符合你的需求。

接下来给你两个靠谱的解决方案:

方案一:精准匹配用户名的正则

咱们直接把正则写成专门捕获@后面用户名的形式,同时先判断匹配是否成功,避免空引用:

public string ExtractUsername(string title)
{
    // 正则作用:匹配(@xxx)格式,精准捕获xxx部分的用户名
    var regexMatch = Regex.Match(title, @"\(@([^)]+)\)");
    // 先检查是否匹配成功,避免空引用
    if (regexMatch.Success)
    {
        // Groups[1]就是我们捕获到的纯用户名部分
        return regexMatch.Groups[1].Value;
    }
    // 没有匹配到的时候返回默认值,你可以根据需求改成null或者其他内容
    return string.Empty;
}

这个正则的细节拆解:

  • \(:转义左括号,因为括号在正则里是特殊字符,必须转义才能匹配字面量的(
  • @:匹配字符串里的@符号
  • ([^)]+):这是一个捕获组,[^)]表示匹配除了右括号)之外的任意字符,+表示匹配至少一个字符,这样就精准拿到了@后面的用户名
  • \):转义右括号,匹配字面量的)

方案二:更严谨的格式校验(可选)

如果担心输入字符串格式可能有偏差,还可以先确认整个字符串符合预期格式再提取,比如:

public string ExtractUsername(string title)
{
    // 先匹配完整的<title>包裹格式,同时捕获用户名
    var regexMatch = Regex.Match(title, @"<title>.*\(@([^)]+)\) on .*</title>");
    if (regexMatch.Success)
    {
        return regexMatch.Groups[1].Value;
    }
    return string.Empty;
}

这个正则会先确保整个字符串是<title>包裹的、包含on [Site]的格式,再提取用户名,适合对输入格式要求严格的场景。

最后提醒一句:处理正则匹配的时候,一定要先判断match.Success,避免因为没匹配到内容而触发空引用异常哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:19:44