我想使用RegEx将字符串拆分为多个对象。每个记录由a分隔,每个字段由〜分开。使用正则表达式的多模式匹配
所以样本数据会看起来像:
:1~Name1:2~Name2:3~Name3
正则表达式我至今是
:(?<id>\d+)~(?<name>.+)
然而,这只会匹配的第一条记录的时候,确实我希望3.如何我得到的RegEx返回所有比赛,而不仅仅是第一次?
我想使用RegEx将字符串拆分为多个对象。每个记录由a分隔,每个字段由〜分开。使用正则表达式的多模式匹配
所以样本数据会看起来像:
:1~Name1:2~Name2:3~Name3
正则表达式我至今是
:(?<id>\d+)~(?<name>.+)
然而,这只会匹配的第一条记录的时候,确实我希望3.如何我得到的RegEx返回所有比赛,而不仅仅是第一次?
你最后的.+
是贪婪的,所以它吞噬了Name1
以及其他的字符串。
尝试
:(?<id>\d+)~(?<name>[^:]+)
这意味着该名称不能在它:
(这可能是为您的数据确定),并确保该名称不抢入下一场。
(也可以使用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
});
您更好地使用字符串.split()
方法。
String[] records = myString.split(':');
for(String rec : records)
{
String[] fields = rec.split('~');
//use fields
}