[英]C# regular expressions. Get nth occurrence
嗨,我想尝试使用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
这个效果的东西,但在正则表达式。
有没有办法在正则表达式模式中选择出现? 例如;
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");
你可以使用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
谢谢大家的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.