我有一个基本上是文件名的字符串。 我们讨厌的最终用户决定他们想要在文件名中的某个地方放置我们的产品代码,如果他们愿意的话。 现在,我能想到的唯一方法就是在数字长度大于4的字符串中查找数字。下面是一个例子,但我不确定如何检查一个字符串是否包含一个数字长度大于4或不大于4。
73767 Carex Wipes Clipstrip Pack - Strawberry Laces.xlsm
答案 0 :(得分:5)
只是一个简单的正则表达式:
String source = "73767 Carex Wipes Clipstrip Pack - Strawberry Laces.xlsm";
// "{5,}" pattern - 5 or more digits == "length is greater than 4"
Boolean result = Regex.IsMatch(source, "[0-9]{5,}");
要获取这些数字,您可以使用 Linq :
var numbers = Regex.Matches(source, "[0-9]{5,}")
.OfType<Match>()
.Select(match => int.Parse(match.Value));
// 73767
Console.Write(String.Join(", ", numbers));
答案 1 :(得分:3)
您可以使用字符串方法和LINQ的组合:
string fn = "73767 Carex Wipes Clipstrip Pack - Strawberry Laces.xlsm";
var numbers = System.IO.Path.GetFileNameWithoutExtension(fn).Split()
.Where(s => s.Length > 4)
.Select(s => s.TryGetInt32())
.Where(nullableInt => nullableInt.HasValue)
.Select(nullableInt => nullableInt.Value);
int firstNumber = numbers.DefaultIfEmpty(-1).First();
使用这个方便的扩展方法从字符串中获取int?
:
public static int? TryGetInt32(this string item)
{
int i;
bool success = int.TryParse(item, out i);
return success ? (int?)i : (int?)null;
}
答案 2 :(得分:0)
按照建议使用正则表达式。
[0-9]{4,}
这将共同找到4个或更多数字。
public static string[] PotentialProductCodes(string input)
{
Regex codesSplit = new Regex("[0-9]{4,}", RegexOptions.Compiled);
List<string> list = new List<string>();
foreach (Match match in codesSplit.Matches(input))
{
list.Add(match.Value);
}
return list.ToArray<string>();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(
PotentialProductCodes("73767 Carex Wipes Clipstrip Pack - Strawberry Laces.xlsm"));
}