C#正则表达式。第n次出现

C#正则表达式。第n次出现,c#,regex,C#,Regex,嗨,我正在尝试使用regx拆分字符串。如何获取模式的第n次出现,以便将其分配给字符串 var myString = "1.2.300.4"; var pattern = new Regex(@"([0-9]+)"); var major = pattern.Occurrence(1); //first occurrence var minor = pattern.Occurrence(2) //second occurrence var build = pattern.Occurrence(3

嗨,我正在尝试使用regx拆分字符串。如何获取模式的第n次出现,以便将其分配给字符串

var myString = "1.2.300.4";
var pattern = new Regex(@"([0-9]+)");

var major = pattern.Occurrence(1); //first occurrence
var minor = pattern.Occurrence(2) //second occurrence
var build = pattern.Occurrence(3) //third occurrence
var revision = pattern.Occurrence(4) // forth occurrence
类似的东西,但在正则表达式中

有没有办法选择正则表达式模式本身中的引用? eg

你可以使用这样的方法

var myString = "1.2.300.4";
var array = myString.Split(new char[] {'.'}, StringSplitOptions.RemoveEmptyEntries);
foreach (var element in array)
{
    Console.WriteLine (element);
}
输出将是

1
2
300
4
这里有一个

作为一种选择,在某些情况下,使用可能是更好的选择。喜欢

Version v = new Version("1.2.300.4");
Console.WriteLine (v.Major);
Console.WriteLine (v.Minor);
Console.WriteLine (v.Build);
Console.WriteLine (v.Revision);
输出将是

1
2
300
4

您可以使用
Match
查找第一个匹配项,然后在每个匹配项上使用
NextMatch
获取下一个匹配项

var major = pattern.Match(myString);
var minor = major.NextMatch();
var build = minor.NextMatch();
var revision = build.NextMatch();
如果您不想懒洋洋地迭代匹配,您可以使用
matches
解析整个字符串,然后按索引获取匹配(如果需要):

使用
string.Split('..')。

结果将是一个数组

var myString = "1.2.300.4";
var myResults = myString.Split('.');

var major = myResults[0]; //first occurrence
var minor = myResults[1]; //second occurrence
var build = myResults[2]; //third occurrence
var revision = myResults[3]; // forth occurrence

已解决…

这是我用正则表达式所能想到的最接近我头脑中的想法。它适用于任何已知长度的字符串

var myString = "1.2.300.4.50.6000.70";
var pattern = new Regex(@"([0-9]+)");
var match = pattern.Matches(myString);

var secondOccurrence = match[1]; // 2
var fifthOccurrence = match[5];  // 6000

谢谢大家的帮助。

为什么不
myString.Split('.')
并返回一个数组,其中每个数字都是字符串。您也可以使用该类为您解析它。@Habib。我以前想过string.split,但正如你现在所说的,我知道它将如何工作。谢谢。请将您的答案转换为实际答案。答案不应该嵌入到一个问题中(它打破了堆栈交换模型)。如果字符串有100个匹配项,而他只需要前5个呢?这急切地解析了整件事。@Servy你完全正确,但OP没有提到这种巨大的匹配:)谢谢你的回答。这和我想要的很接近,而且很有效。那么有没有办法在正则表达式模式内部进行匹配呢?我编辑了上面的示例来说明我的意思。@user282081这基本上是第二个示例,假设您在急切地解析整个内容时没有问题。是的,这是我首先做的,谢谢。但我正在学习正则表达式,并希望在正则表达式中使用它。如果字符串更长,并且有更多的“.”,而您只想获得出现次数的子集,这将是最有用的答案。@user282081谢谢。根据你的评论“我如何获得第N场”我想你可能只想要第3场或者说第7场比赛,而不是所有的比赛都排在一起。哇,谢谢你。在将来编写关于表单的代码时,它将非常有用。
var myString = "1.2.300.4";
var myResults = myString.Split('.');

var major = myResults[0]; //first occurrence
var minor = myResults[1]; //second occurrence
var build = myResults[2]; //third occurrence
var revision = myResults[3]; // forth occurrence
var version = Version.Parse("1.2.300.4");

var major = version.Major;
var minor = version.Minor;
var build = version.Build;
var revision = version.Revision;
var myString = "1.2.300.4.50.6000.70";
var pattern = new Regex(@"([0-9]+)");
var match = pattern.Matches(myString);

var secondOccurrence = match[1]; // 2
var fifthOccurrence = match[5];  // 6000