从C#中的字符串列表中提取不同的数字列表

时间:2015-01-29 20:21:10

标签: c# regex linq

我有一个包含以下值的字符串列表:

"/manufacturers/244/rz-xvxcv/images/swed"
"/manufacturers/23/rz-gf/images/sltn"
"/manufacturers/34/rz-dffdf/images/five"
"/manufacturers/23/rz-gfgf/images/lead"
"/manufacturers/322/rz-dfg/images/carr"
"/manufacturers/3789/rz-fgdfgfg/images/zing"

我需要提取属于模式/manufacturers/[int]/rz-

的数字值的不同列表

所以在上面的例子中,我的新列表将包含:244,23,34,322,3789

可以使用RegEx和Linq完成吗?

4 个答案:

答案 0 :(得分:5)

我只使用Split代替正则表达式

var numbers = paths.Select(p=>int.Parse(p.Split('/')[2])).ToList();

答案 1 :(得分:1)

不是超级抽象或可重复使用,但非常重要。

var numbers = paths.Select(p => int.Parse(p.Substring(15, p.IndexOf('/', 15) - 15)));

答案 2 :(得分:1)

如果你想使用RegEx和LINQ:

var regex = new Regex(@"(\d+)");
var numbers = paths.Select(i => regex.Match(i).Value).ToList();

答案 3 :(得分:0)

你可以使用这种模式
(\d+)(?!.*\1) 没有按顺序提取 Demo

(               # Capturing Group (1)
  \d            # <digit 0-9>
  +             # (one or more)(greedy)
)               # End of Capturing Group (1)
(?!             # Negative Look-Ahead
  .             # Any character except line break
  *             # (zero or more)(greedy)
  \1            # Back reference to group (1)
)               # End of Negative Look-Ahead