有这样的文字
Above includes - Add/Remove Member To/From Nested Group - 1.24.12 / 1.24.13
如何创建一个正则表达式,返回我拥有的2组3个数字。 预期结果
1.24.12
1.24.13
我尝试使用这样的表达式
private static Regex MRDNumbers = new Regex(@"((\d+.?){2,})+");
但它根本不起作用。
此外,组的长度可以不同,也可以是
1.22
13.4.7
1.2.3.4
1.2.3.4.5
1.2.3.4.5.6
答案 0 :(得分:2)
问题在于您的模式中的.
。在正则表达式语言中,.
字符匹配任何字符(单行模式除外),因此您必须使用\
字符对其进行转义才能匹配句点。
请改为尝试:
private static Regex MRDNumbers = new Regex(@"((\d+\.?){2,})+");
要捕获列表中的所有匹配数字,您可以尝试:
private Regex MRDNumbers = new Regex(@"(\d+?)(?:\.(\d+))+");
string input = "Above includes - Add/Remove Member To/From Nested Group - 1.24.12 / 1.24.13";
MRDNumbers.Matches(input).Cast<Match>().Dump();
var list =
(from m in MRDNumbers.Matches(input).Cast<Match>()
select
from g in m.Groups.Cast<Group>().Skip(1)
from c in g.Captures.Cast<Capture>()
select c.Value)
.ToList();
// [ [ 1, 24, 12 ], [ 1, 24, 12 ] ]
或者用流利的语法:
var list =
MRDNumbers.Matches(input).Cast<Match>()
.Select(m => m.Groups.Cast<Group>()
.Skip(1)
.SelectMany(g => g.Captures.Cast<Capture>())
.Select(c => c.Value))
.ToList();
答案 1 :(得分:1)
private static Regex MRDNumbers = new Regex(@"((\d+\.?){2,})+");
static void Main(string[] args)
{
string s = " Above includes - Add/Remove Member To/From Nested Group - 1.24.12 / 1.24.13.45 45.78";
MatchCollection m = MRDNumbers.Matches(s);
foreach (Match match in m)
{
Debug.WriteLine(match.Value);
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用此正则表达式
\d+(\.\d+)+
您可以使用此代码
获取此类数字的列表List<String> lst=Regex.Matches(input,regex)
.Cast<Match>()
.Select(x=>x.Value);
答案 4 :(得分:0)
您需要逃离您的点和其中一个组。你离开1.24.12 12
的原因是12
是填补第2组的最后一场比赛,所以你得到了那个吐出来。
试试这个:
private static Regex MRDNumbers = new Regex(@"((?:\d+\.?){2,})+");