C# 使用正则表达式的多模式匹配

C# 使用正则表达式的多模式匹配,c#,.net,regex,C#,.net,Regex,我正在尝试使用正则表达式将字符串拆分为多个对象。每个记录用a:分隔,每个字段用a~分隔 因此,示例数据如下所示: :1~Name1:2~Name2:3~Name3 到目前为止,我的正则表达式是 :(?<id>\d+)~(?<name>.+) :(?\d+)(?。+) 然而,这将只符合第一个记录,当我真的期待3。如何让正则表达式返回所有匹配项而不仅仅是第一个匹配项?您的最后一个+非常贪婪,因此它会吞噬名称1以及字符串的其余部分 试一试 :(?\d+)(?[^::+)

我正在尝试使用正则表达式将字符串拆分为多个对象。每个记录用a:分隔,每个字段用a~分隔

因此,示例数据如下所示:

:1~Name1:2~Name2:3~Name3
到目前为止,我的正则表达式是

:(?<id>\d+)~(?<name>.+)
:(?\d+)(?。+)

然而,这将只符合第一个记录,当我真的期待3。如何让正则表达式返回所有匹配项而不仅仅是第一个匹配项?

您的最后一个
+
非常贪婪,因此它会吞噬
名称1
以及字符串的其余部分

试一试

:(?\d+)(?[^::+)
这意味着名称中不能有
(这对于您的数据来说可能没问题),并确保名称不会进入下一个字段


(还可以使用Regex.Matches方法来获取所有匹配项,而不仅仅是第一个匹配项)。

您最后的
+
是贪婪的,因此它会吞噬
名称1以及字符串的其余部分

试一试

:(?\d+)(?[^::+)
这意味着名称中不能有
(这对于您的数据来说可能没问题),并确保名称不会进入下一个字段

(还可以使用Regex.Matches方法获取所有匹配项,而不仅仅是第一个匹配项)。

使用:

var result = Regex.Matches(input, @":(?<id>\d+)~(?<name>[^:]+)").Cast<Match>()
    .Select(m => new 
    { 
        Id = m.Groups["id"].Value, 
        Name = m.Groups["name"].Value 
    });
var result=Regex.Matches(输入@):(\d+)(?[^::]).Cast()
.选择(m=>new
{ 
Id=m.Groups[“Id”].值,
Name=m.Groups[“Name”].Value
});
使用:

var result=Regex.Matches(输入@):(\d+)(?[^::]).Cast()
.选择(m=>new
{ 
Id=m.Groups[“Id”].值,
Name=m.Groups[“Name”].Value
});

您最好对字符串使用
.split()
方法

String[] records = myString.split(':');
for(String rec : records)
{
    String[] fields = rec.split('~');
    //use fields
}

最好对字符串使用
.split()
方法

String[] records = myString.split(':');
for(String rec : records)
{
    String[] fields = rec.split('~');
    //use fields
}