我正试图从HML链接中获取版本号。
以此为例
firefox-10.0.2.bundle
我已经把它带到-
之后的所有内容
string versionNum = name.Split('-').Last();
versionNum = Regex.Replace(versionNum, "[^0-9.]", "");
,它为您提供
的输出10.0.2
但是,如果链接是这样的
firefox-10.0.2.source.tar.bz2
输出看起来像
... 10.0.2 2
我怎样才能让它在第三个.
之后切掉所有东西?或者我可以这样做,以便在检测到第一个字母时切断它以及随后的所有内容吗?
答案 0 :(得分:5)
您可以使用单个正则表达式匹配来解决此问题。 这是一个例子:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
Regex regex = new Regex(@"\d+.\d+.\d+");
Match match = regex.Match("firefox-10.0.2.source.tar.bz2");
if (match.Success)
{
Console.WriteLine(match.Value);
}
}
}
答案 1 :(得分:1)
string a = "10.0.2.source.tar.bz2";
string[] list = a.Split(new char [] { '.' });
string output = ""
foreach(var item in list)
{
if item is integer then // try to write this part
output += item + ".";
}
after that remove the last character from output.
答案 2 :(得分:1)
虽然很晚,我觉得这个答案会更贴切:
var arrayOfObjects = [{0: item1}, {1: item2}, {2: item3}];
改进 -
虽然Regex r = new Regex(@"[\d\.]+(?![a-zA-Z\-])");
Match m = r.Match(name);
Console.WriteLine(m.Value);
的答案有效,但如果构建为@Samuel
会怎样?他的正则表达式会给10.2.2.3
- 部分答案,因此是错误的。
通过我发布的正则表达式,匹配将完成。
10.2.2
会匹配数字和点的所有组合,例如[\d\.]+
,如果构建为10.2.2.34.56.78
10
10.bundle
是一种否定的预测,可确保匹配后面没有任何字母或短划线。
健壮对任何代码都是至关重要的,所以我发布的答案应该在任何情况下都能很好地工作(因为链接可以是任何代码)。
答案 3 :(得分:1)
这是一个可以处理输入字符串中1-4个数字(不仅仅是数字)的版本,并返回一个版本号:
public static Version ExtractVersionNumber(string input)
{
Match match = Regex.Match(input, @"(\d+\.){0,3}\d+");
if (match.Success)
{
return new Version(match.Value);
}
return null;
}
void Main()
{
Console.WriteLine(ExtractVersionNumber("firefox-10.source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0.source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0.2.source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0.2.5.source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0.2.5.6.source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0.2source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0.2.5source.tar.bz2"));
Console.WriteLine(ExtractVersionNumber("firefox-10.0.2.5.6source.tar.bz2"));
}
基本上有两部分:
(\d+\.){0,3}
- 匹配一个数字(一个或多个数字的不间断序列),后面跟一个点。匹配此0到3次。\d+
- 匹配一个数字(一个或多个数字的序列)。这些工作如下:
PS。如果你想确保你只得到连字符后的数字(例如,为了避免给4.0.1
字符串firefox4.0.1-10.0.2.source.tar.bz2"
),你可以在后面添加一个负面的外观来说明&#34;之前的字符版本号必须是连字符&#34;:(?<=-)(\d+\.){0,3}\d+
。