C# 易正则表达式捕获

C# 易正则表达式捕获,c#,regex,capture,C#,Regex,Capture,对于使用C#Regex来说,我是一个新手,我试图将字符串中两个逗号分隔的整数捕获到两个变量中 示例:13567 我试过了 Regex regex = new Regex(@"(\d+),(\d+)"); var matches = regex.Matches("12,345"); foreach (var itemMatch in matches) Debug.Print(itemMatch.Value); 这只捕获1个变量,即整个字符串。我通过将捕获模式更改为“(\d+)”,解决了

对于使用C#Regex来说,我是一个新手,我试图将字符串中两个逗号分隔的整数捕获到两个变量中

示例:
13567

我试过了

Regex regex = new Regex(@"(\d+),(\d+)");
var matches = regex.Matches("12,345");

foreach (var itemMatch in matches)
    Debug.Print(itemMatch.Value);
这只捕获1个变量,即整个字符串。我通过将捕获模式更改为
“(\d+)”
,解决了这个问题,但这样会完全忽略中间的逗号,如果整数之间有任何文本,我会得到匹配。 如何让它同时提取两个整数并确保在它们之间也能看到逗号。

可以使用String.Split实现这一点 为什么不使用拆分和解析呢

var results = "123,456".Split(',').Select(int.Parse).ToArray();
var left = results[0];
var right = results[1];
或者,您可以使用一个循环并使用
int.TryParse
来处理故障,但对于您正在寻找的内容,这应该包括它

如果你真的很喜欢正则表达式 您也可以使用正则表达式来实现这一点,只需要使用匹配的组

Regex r = new Regex(@"(\d+)\,(\d+)", RegexOptions.Compiled);
var r1 = r.Match("123,456");
    
//first is total match
Console.WriteLine(r1.Groups[0].Value);
    
//Then first and second groups
    
var left = int.Parse(r1.Groups[1].Value);
var right = int.Parse(r1.Groups[2].Value);
    
Console.WriteLine("Left "+ left);
Console.WriteLine("Right "+right);
您还可以在中测试解决方案

可以使用String.Split执行此操作 为什么不使用拆分和解析呢

var results = "123,456".Split(',').Select(int.Parse).ToArray();
var left = results[0];
var right = results[1];
或者,您可以使用一个循环并使用
int.TryParse
来处理故障,但对于您正在寻找的内容,这应该包括它

如果你真的很喜欢正则表达式 您也可以使用正则表达式来实现这一点,只需要使用匹配的组

Regex r = new Regex(@"(\d+)\,(\d+)", RegexOptions.Compiled);
var r1 = r.Match("123,456");
    
//first is total match
Console.WriteLine(r1.Groups[0].Value);
    
//Then first and second groups
    
var left = int.Parse(r1.Groups[1].Value);
var right = int.Parse(r1.Groups[2].Value);
    
Console.WriteLine("Left "+ left);
Console.WriteLine("Right "+right);

如果您也可以使用Regex测试解决方案,您可以使用以下方法:

Regex regex = new Regex(@"\d+(?=,)|(?<=,)\d+");
var matches = regex.Matches("12,345");

foreach (Match itemMatch in matches)
    Console.WriteLine(itemMatch.Value);
实际上,这是在做一个向前看和向后看的

\d+(?=,)     <---- // Match numbers followed by a ,
|            <---- // OR
(?<=,)\d+    <---- // Match numbers preceeded by a ,

\d+(?=,)对于正则表达式,您可以使用:

Regex regex = new Regex(@"\d+(?=,)|(?<=,)\d+");
var matches = regex.Matches("12,345");

foreach (Match itemMatch in matches)
    Console.WriteLine(itemMatch.Value);
实际上,这是在做一个向前看和向后看的

\d+(?=,)     <---- // Match numbers followed by a ,
|            <---- // OR
(?<=,)\d+    <---- // Match numbers preceeded by a ,


\d+(?=,)你为什么不使用
split
?在你的比赛中,你需要看看
,我想我可以,但因为我以前没有使用过regex,所以我认为这是一个简单易懂的例子。我觉得这很尴尬,但还没有解决。因此,如果能使用正则表达式,我们将不胜感激。谢谢你为什么不使用
split
?在你的比赛中,你需要查看
,我想我可以,但是因为我以前没有使用过正则表达式,所以我认为这是一个简单易懂的例子。我觉得这很尴尬,但还没有解决。因此,如果能使用正则表达式,我们将不胜感激。谢谢问题不是关于如何分割字符串,而是关于如何访问捕获组。每个人都知道如何拆分字符串。@WiktorStribiż新问题是关于正则表达式的,但通过拆分可以获得解决方案,并添加了如何使用正则表达式完成OP所寻找的内容问题不是关于如何拆分字符串,而是关于如何访问捕获组。每个人都知道如何拆分字符串。@WiktorStribiż新问题是关于正则表达式的,但通过拆分可以获得解决方案,并添加了如何使用正则表达式来完成OP所寻找的内容重点不是如何编写“更好”的正则表达式,而是如何访问捕获的值。唉,嗅盐需要满足!我认为这是一个简单的问题,对于新手来说,这是一个看起来很可怕的正则表达式模板。@geoffw123个人认为这样的评论没有帮助,可以简单地说,它看起来太复杂了……也就是说,我们确实同意,这看起来像是一种处理问题的次优方式problem@geoffw123我添加了一个描述。科技话题读起来有点枯燥,我认为正则表达式问题特别糟糕,所以有点礼貌的轻浮和幽默并不是坏事。我对Regex“忍者”海报印象深刻,但模板仍然让我头疼。谢谢你们的回复,伙计们,“组”这个词足够我自己解决它了。我对组索引[0]返回整个字符串的事实感到有点惊讶。这是不直观的,不知道它为什么会这样做?问题不在于如何编写“更好”的正则表达式,而在于如何访问捕获的值。嗯,嗅盐!我认为这是一个简单的问题,对于新手来说,这是一个看起来很可怕的正则表达式模板。@geoffw123个人认为这样的评论没有帮助,可以简单地说,它看起来太复杂了……也就是说,我们确实同意,这看起来像是一种处理问题的次优方式problem@geoffw123我添加了一个描述。科技话题读起来有点枯燥,我认为正则表达式问题特别糟糕,所以有点礼貌的轻浮和幽默并不是坏事。我对Regex“忍者”海报印象深刻,但模板仍然让我头疼。谢谢你们的回复,伙计们,“组”这个词足够我自己解决它了。我对组索引[0]返回整个字符串的事实感到有点惊讶。这是非直觉的,不知道为什么会这样?