C# 基于[,]分隔符拆分字符串并提取分组内容的实现问题咨询
C# 字符串分组提取与格式校验实现
核心思路
优先用固定分隔符拆分+格式规则校验的方案,逻辑清晰性能高,不需要复杂的字符串操作:
- 按统一分隔符
[,]对输入字符串做拆分 - 先通过拆分后的数组长度做第一层合法性校验
- 对偶数位的索引项做规则匹配,确认是否符合三类合法索引格式(纯数字、纯字母、字母+右括号)
- 校验通过后直接提取奇数位的内容作为分组结果
可直接复用的代码实现
using System; using System.Collections.Generic; using System.Text.RegularExpressions; public static class GroupExtractor { // 固定分隔符 private static readonly string[] _separator = new[] { "[,]" }; // 合法索引规则:纯数字/纯英文字母/英文字母+右括号,不区分大小写 private static readonly Regex _validIndexRegex = new Regex(@"^(?:\d+|[a-zA-Z]|[a-zA-Z]\))$", RegexOptions.Compiled); /// <summary> /// 尝试从输入字符串提取分组内容 /// </summary> /// <param name="input">输入字符串</param> /// <param name="groups">输出的分组列表,合法格式下为4个分组</param> /// <returns>输入是否符合标准分隔模式</returns> public static bool TryExtract(string input, out List<string> groups) { groups = new List<string>(); if (string.IsNullOrWhiteSpace(input)) return false; var splitItems = input.Split(_separator, StringSplitOptions.None); // 4个分组的合法字符串拆分后长度固定为8(4组*2元素/组:索引+分组名) if (splitItems.Length != 8) return false; for (int i = 0; i < splitItems.Length; i += 2) { // 校验索引项是否合法 if (!_validIndexRegex.IsMatch(splitItems[i].Trim())) return false; // 收集分组内容 groups.Add(splitItems[i + 1].Trim()); } return true; } }
使用示例
// 测试合法输入 string validInput = "1[,]Group A[,]2[,]Group B[,]3[,]Group C[,]4[,]Group D"; if (GroupExtractor.TryExtract(validInput, out var groups)) { // 这里groups的内容就是 ["Group A", "Group B", "Group C", "Group D"] foreach (var group in groups) { Console.WriteLine(group); } } // 测试非法输入 string invalidInput = "1 Group A[,]2 Group B[,]3 Group C[,]4 Group D"; if (!GroupExtractor.TryExtract(invalidInput, out _)) { Console.WriteLine("输入不符合标准分隔模式"); }
补充说明
- 如果需要适配更多数量的分组,只需要把代码里的长度校验
splitItems.Length != 8改成splitItems.Length % 2 != 0即可 - 索引规则如果有调整,直接修改
_validIndexRegex的正则规则即可
内容的提问来源于stack exchange,提问作者sd0505
相关产品推荐
相关产品推荐

