C# 正则表达式.获得第 n 次出现

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:33:50

嗨,我正在尝试使用正则表达式拆分字符串。如何获取模式的第 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

大意如此的东西,但在正则表达式中。

有没有办法选择正则表达式模式本身的出现次数?例如;

var major = new Regex(@"([0-9]+)$1");
var minor = new Regex(@"([0-9]+)$2");
var build = new Regex(@"([0-9]+)$3");
var revision = new Regex(@"([0-9]+)$4");

C# 正则表达式.获得第 n 次出现

您可以使用Match查找

第一个,然后在每个匹配项上NextMatch以获取下一个。

var major = pattern.Match(myString);
var minor = major.NextMatch();
var build = minor.NextMatch();
var revision = build.NextMatch();

如果你不想懒惰地迭代匹配项,你可以使用 Matches 来解析整个字符串,然后按索引获取匹配项(如果需要):

var allmatches = pattern.Matches(myString);
var major = allmatches[0];
//...
您可以使用

String.Split方法,例如;

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

这里是一个DEMO.

作为替代方案,在某些情况下,使用System.Version可能是更好的选择。喜欢;

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

使用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 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

感谢大家的帮助。