C# 从字符串中间查找特定文本,并将其存储到datatable或C中的列表中#

C# 从字符串中间查找特定文本,并将其存储到datatable或C中的列表中#,c#,asp.net,string,split,C#,Asp.net,String,Split,我有一个字符串如下 string error_message= "{\"2705\":\"Error importing username: 3167763, primary email: pkumar194@google.com, error: User already exists but Email does not match: pkumar194@googlee.com vs pkumar193@google.co.in\",\&quo

我有一个字符串如下

string error_message= "{\"2705\":\"Error importing username: 3167763, primary email: pkumar194@google.com, error: User already exists but Email does not match: pkumar194@googlee.com vs pkumar193@google.co.in\",\"10001\":\"Error importing username: 3195330, primary email: alejandra.mejia@google.com, error: User already exists but Email does not match: alejandra.mejia@google.com vs alejandra.mejia@googlee.com\"}";
从上面的字符串中,我需要找到重复的文本“Error importing username:”,并将其旁边的用户名值存储在
int
或datatable中,预期输出如下所示

3167763
3195330
我试过使用下面的代码,但它只在“”错误导入用户名:”文本出现一次时才起作用,但在我的情况下,文本正在重新重复,我需要获取列表中的所有用户名

非常需要你的帮助,提前谢谢

string error_message= "{\"2705\":\"Error importing username: 3167763, primary email: pkumar194@google.com, error: User already exists but Email does not match: pkumar194@googlee.com vs pkumar193@google.co.in\",\"10001\":\"Error importing username: 3195330, primary email: alejandra.mejia@google.com, error: User already exists but Email does not match: alejandra.mejia@google.com vs alejandra.mejia@googlee.com\"}";
string strStart = "Error importing username:";
string strEnd = ",";


if (error_msg.Contains(strStart) && error_msg.Contains(strEnd))
{
                                    
    int Start = error_msg.IndexOf(strStart) + strStart.Length;
    int End = error_msg.IndexOf(strEnd, Start);
    return error_msg.Substring(Start, End - Start);
}

我认为这应该使用linq实现。这是假设字符串
导入用户名时出错:
出现在
错误消息中。当然,如果输入字符串的格式发生更改,则需要进行一些调整

var ids = error_message.Split("Error importing username: ")
                .Skip(1)
                .Select(x => x.Split(",").First());

最简单的解决方案是正则表达式:

List<int> list = Regex.Matches(error_message, @"(?<=Error importing username: )\d+")
    .Select(match => int.Parse(match.Value))
    .ToList();

如果您使用IndexOf而不是Contains,您可以指定搜索应该从哪里开始-如果您使用最后一次找到的匹配项的结尾,您可以继续重复搜索,直到找到所有匹配项。或者,当然,只需使用Regex.nice!比mine好得多我在使用ur代码时出现以下错误,请您帮助错误CS1061的MatchCollection'不包含'Select'的定义,并且找不到接受'MatchCollection'类型的第一个参数的扩展方法'Select'(是否缺少using指令或程序集引用?)我已经使用了下面所有必需的名称空间,但仍然在使用System;使用System.Collections.Generic;使用System.Linq;使用System.Text.RegularExpressions;@7Mviews时出现此错误,可能是因为您使用的是.Net Framework而不是.Net Core。请参阅我的更新。以及用户名。我如何获取相应的主要电子邮件:考试值ple“导入用户名时出错:3167763,主电子邮件:pkumar194@google.com“为此,我需要输出为集合,用户id和电子邮件分别列在3167763中pkumar194@google.com我尝试了不同的方法,但没有运气,你的帮助太多了appreciated@7Mviews您可以使用正则表达式捕获组,但是你真的应该把这个问题作为一个新的问题来发布,因为答案与上面的大不相同。
List<int> list = Regex.Matches(error_message, @"(?<=Error importing username: )\d+")
    .Cast<Match>()
    .Select(match => int.Parse(match.Value))
    .ToList();