如何使用Regex从指定字符串中提取索引、姓名及余额值?
正则表达式提取文本中的索引、姓名和余额
给定字符串:
string text = "0. Index - 1, Name - mirlan, Balance - 300";
需要从中提取:
- 整数
1作为index - 字符串
"mirlan"作为name - 整数
300作为balance
要求用正则表达式实现,以下是我的两次尝试:
第一次尝试
Regex regexIndex = new Regex(@"Index-[0-9]*,", RegexOptions.IgnorePatternWhitespace); int index = Convert.ToInt32(regexIndex.Match(text));
第二次尝试
Regex regexIndex = new Regex(@"Index-[0-9]*,", RegexOptions.IgnorePatternWhitespace); MatchCollection IndexMatches = regexIndex.Matches(text); int index = Convert.ToInt32(IndexMatches[0].Value);
问题点说明
这两次尝试都有问题:
- 正则没匹配原字符串里
Index和数字之间的空格(原字符串是Index - 1,正则写的Index-[0-9]*少了空格和-前后的空格) - 直接匹配
Index - 1,这类完整片段,转整数时会包含非数字字符,必然报错 - 没用到捕获组,没法精准提取目标内容
正确实现方案
方案1:一次性提取所有值
用一个正则同时捕获三个目标,效率更高:
string text = "0. Index - 1, Name - mirlan, Balance - 300"; Regex regex = new Regex(@"Index - (\d+), Name - ([^,]+), Balance - (\d+)"); Match match = regex.Match(text); if (match.Success) { int index = int.Parse(match.Groups[1].Value); string name = match.Groups[2].Value.Trim(); // Trim处理可能的空格 int balance = int.Parse(match.Groups[3].Value); // 这里可以直接使用提取出的index、name、balance }
方案2:分别提取单个值
如果不需要一次性提取,也可以分开写正则:
- 提取index:
Regex indexRegex = new Regex(@"Index - (\d+)"); int index = int.Parse(indexRegex.Match(text).Groups[1].Value);
- 提取name:
Regex nameRegex = new Regex(@"Name - ([^,]+)"); string name = nameRegex.Match(text).Groups[1].Value.Trim();
- 提取balance:
Regex balanceRegex = new Regex(@"Balance - (\d+)"); int balance = int.Parse(balanceRegex.Match(text).Groups[1].Value);
正则规则说明
(\d+):捕获一个或多个数字,专门用来提取整数类型的index和balance([^,]+):捕获到下一个逗号之前的所有内容,适配姓名可能包含特殊字符的情况(如果姓名只有字母,也可以用(\w+))- 正则里的空格完全对应原字符串的空格,避免因空格不匹配导致提取失败
内容的提问来源于stack exchange,提问作者xsainteer
相关产品推荐
相关产品推荐

