您好我需要的正則表達式在C#中符合下列格式正則表達式的{productName} - {}版本 - {X} {-OF- Y} .EXE在C#
{產品名稱} - {}版本 - {X} -OF- {Y} .EXE
例
AttDts-14.0.0.1-1-的-3.EXE
AttDts-14.0.0.1-2-的-3.EXE
AttDts-14.0.0.1-3 of-3.EXE
如果我在上面例子中提到了包名,單個表達式是否可以匹配整個包?
感謝, 一閃
您好我需要的正則表達式在C#中符合下列格式正則表達式的{productName} - {}版本 - {X} {-OF- Y} .EXE在C#
{產品名稱} - {}版本 - {X} -OF- {Y} .EXE
例
AttDts-14.0.0.1-1-的-3.EXE
AttDts-14.0.0.1-2-的-3.EXE
AttDts-14.0.0.1-3 of-3.EXE
如果我在上面例子中提到了包名,單個表達式是否可以匹配整個包?
感謝, 一閃
你可以試試這個正則表達式。這應該根據您的規格工作。
Regex.IsMatch(subjectString, @"/\w+-(?:\d+\.){3}\d+-\d+-of-\d+.EXE/",
RegexOptions.Multiline)
你好你可以試試這個表達式:
([^\-]+)\-((?:\d+\.){3}\d+)\-(\d+)\-of\-(\d+)\.exe
編輯 - 正則表達式
然後你就可以實現的方法有以下模式:
static bool isValidPackageName(string packageName)
{
String pattern = @"([^\-]+)\-((?:\d+\.){3}\d+)\-(\d+)\-of\-(\d+)\.exe";
return Regex.Match(packageName, pattern, RegexOptions.IgnoreCase).Success;
}
編輯 - 改進方法
順便說一句,如果你不需要來驗證弦上的每個項目(產品名稱,版本,X,Y),你可以只是簡單做到以下幾點:
String input = "AttDts-14.0.0.1-1-of-3.EXE";
String pattern = @"([^\-]+)(?=[\-.])";
Regex regularExpression = new Regex(pattern);
MatchCollection matchCollection = regularExpression.Matches(input);
if (matchCollection.Count > 0)
{
int groupPosition = 0;
foreach (var group in matchCollection)
{
switch (groupPosition)
{
// {productName}
case 0:
Console.WriteLine("Product Name: {0}", group);
break;
// {version}
case 1:
Console.WriteLine("Version: {0}", group);
break;
// {X}
case 2:
Console.WriteLine("X: {0}", group);
break;
// of
case 3:
break;
// {Y}
case 4:
Console.WriteLine("Y: {0}", group);
break;
}
++groupPosition;
}
}
編輯 - 斯普利特
或者你可以只是簡單的避免使用正則表達式:
static void Main(string[] args)
{
String input = "AttDts-14.0.0.1-1-of-3.EXE";
String[] splits = input.Split(new char[] { '-' });
int splitCounter = 0;
foreach (var split in splits)
{
switch (splitCounter)
{
case 0:
var productName = split;
Console.WriteLine("Product Name: {0}", productName);
break;
case 1:
var version = split;
Console.WriteLine("Version: {0}", version);
break;
case 2:
var x = split;
Console.WriteLine("X: {0}", x);
break;
case 3:
break;
case 4:
var y = split.Split(new char[] { '.' })[0];
Console.WriteLine("Y: {0}", y);
break;
}
++splitCounter;
}
}
太棒了。謝謝。我會接受這個答案。通過表達強制執行規則可能還有一個要求。我的意思是說這裏的軟件包名稱是AttDts-14.0.0.1-3-of-3.EXE,即3中的1和3以及3中的3,但如果有人誤將2中的4或9中的3不應該匹配,這是可能的嗎? – user393014
是的,這是可能的。您可以使用:@「/ \ w + - (?:\ d + \。){3} \ d + - [1 | 2 | 3 | 4] -of- [1 | 2 | 3 | 4] .EXE/...這個正則表達式將檢查x的y,其中1 <= x,y <5,x和y之間沒有關係。如果你想強制x
gotcha。感謝您的幫助 – user393014