如何用正则表达式从文本行中拆分出姓名、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> }
原有写法错误原因
- 正向前瞻中的
(是正则特殊字符,未转义会被识别为分组起始符,直接触发语法错误 .*属于贪婪匹配,就算转义了括号也会匹配到最后一个左括号之前的所有内容,使用[^(]*这类排除型字符集匹配更稳定,不会出现越界匹配问题
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

