我正在尝试使用RegEx将字符串拆分为多个对象。每条记录用:分隔,每个字段用〜。
分隔示例数据如下所示:
:1~Name1:2~Name2:3~Name3
我到目前为止的RegEx是
:(?<id>\d+)~(?<name>.+)
然而,这只会匹配第一条记录,而我真正期望的是3.如何让RegEx返回所有匹配而不仅仅是第一条?
答案 0 :(得分:3)
你的上一个.+
是贪婪的,所以它吞噬了Name1
以及其他字符串。
尝试
:(?<id>\d+)~(?<name>[^:]+)
这意味着名称中不能包含:
(这对您的数据可能没问题),并确保名称不会进入下一个字段。
(并且还使用Regex.Matches方法来抓取所有匹配,而不仅仅是第一次)。
答案 1 :(得分:1)
使用:
var result = Regex.Matches(input, @":(?<id>\d+)~(?<name>[^:]+)").Cast<Match>()
.Select(m => new
{
Id = m.Groups["id"].Value,
Name = m.Groups["name"].Value
});
答案 2 :(得分:1)
您最好使用.split()
方法进行字符串处理。
String[] records = myString.split(':');
for(String rec : records)
{
String[] fields = rec.split('~');
//use fields
}