如何用C#正则提取字符串中第一个与第二个逗号间的内容?
问题:提取字符串中第一个和第二个逗号之间的内容
我有如下字符串:
"8/4/2022 9:47:59 AM,Gerald Digat Denys,8/4/2022 9:47:59 AM,Updated,207190091504228,CD_CODE_GD,CD_CODE_GD,CD_DESC_GDxxy,"想要提取第一个和第二个逗号(,)之间的名称,即:
Gerald Digat Denys。
我尝试了以下写法:Regex.Replace(str, @"[^,a-z, A-Z,]+", String.Empty).Replace(",", "").Trim().ToString();但得到了错误的结果:
"AMGerald Digat Denys Ugas AMUpdatedCDCODEGDCDCODEGDCDDESCGDxxy"请问我的正则写法存在什么问题?或者该如何正确实现需求?
原正则的问题
你的正则逻辑完全偏离了需求:
- 正则
[^,a-z, A-Z,]+的作用是匹配所有不是小写字母、大写字母、空格、逗号的字符,然后替换为空,接着你又把所有逗号删掉,相当于把字符串里所有字母和空格都拼在了一起,自然得不到目标内容。 - 另外正则里重复写了多个逗号
[^,a-z, A-Z,]+属于冗余写法,字符集里的重复字符没有实际意义。
正确实现方法
方法1:用正则精准匹配目标内容
直接写正则定位第一个逗号后、第二个逗号前的内容:
string str = "\"8/4/2022 9:47:59 AM,Gerald Digat Denys,8/4/2022 9:47:59 AM,Updated,207190091504228,CD_CODE_GD,CD_CODE_GD,CD_DESC_GDxxy,\""; Match match = Regex.Match(str, @",([^,]+),"); if (match.Success) { string result = match.Groups[1].Value; // 结果为 Gerald Digat Denys }
正则说明:
,:匹配第一个逗号([^,]+):捕获组,匹配任意数量的非逗号字符(即两个逗号之间的内容),:匹配第二个逗号
方法2:字符串分割(更简单直观)
如果字符串格式稳定,直接用Split分割后取对应索引的元素:
string str = "\"8/4/2022 9:47:59 AM,Gerald Digat Denys,8/4/2022 9:47:59 AM,Updated,207190091504228,CD_CODE_GD,CD_CODE_GD,CD_DESC_GDxxy,\""; // 先移除首尾引号(如果需要) str = str.Trim('"'); string[] parts = str.Split(','); if (parts.Length >= 2) { string result = parts[1]; // 结果为 Gerald Digat Denys }
这种方法无需正则,适合格式固定的场景。
内容的提问来源于stack exchange,提问作者Abhishek_Singh_Rana
相关产品推荐
相关产品推荐

