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

如何用正则表达式从文本行中拆分出姓名、ID、邮箱3个部分

正则拆分方案

你需要的正则可以一次性捕获三个目标分组,语法如下:
^\s*([^(]*)\s*(\([^)]*\))\s*(<[^>]*>)$

正则逻辑说明

  • ^\s* 匹配字符串开头的所有空白字符,适配示例中开头带空格的场景
  • 第一个捕获组([^(]*):匹配所有非左括号的字符,对应姓名部分
  • \s* 匹配姓名与ID之间的空白字符
  • 第二个捕获组(\([^)]*\)):匹配包裹在括号内的ID,包含括号本身
  • \s* 匹配ID与邮箱之间的空白字符
  • 第三个捕获组(<[^>]*>):匹配包裹在尖括号内的邮箱,包含尖括号本身
  • $ 匹配字符串结尾,避免多余内容干扰

C# 调用示例

string item = " john smith (idjs) <js@email.com>";
// 注意正则字符串前加@避免转义冲突
var result = Regex.Match(item, @"^\s*([^(]*)\s*(\([^)]*\))\s*(<[^>]*>)$");
if (result.Success)
{
    string fullname = result.Groups[1].Value.Trim(); // 输出:john smith
    string userId = result.Groups[2].Value; // 输出:(idjs)
    string email = result.Groups[3].Value; // 输出:<js@email.com>
}

原有写法错误原因

  1. 正向前瞻中的(是正则特殊字符,未转义会被识别为分组起始符,直接触发语法错误
  2. .*属于贪婪匹配,就算转义了括号也会匹配到最后一个左括号之前的所有内容,使用[^(]*这类排除型字符集匹配更稳定,不会出现越界匹配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:09:05