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