从文件名中获取数字

本文关键字:数字 获取 文件名 | 更新日期: 2023-09-27 18:25:43

我试图从文件名中获取日期,所以我构建了这个reg ex表达式,但我得到的是136413而不是6413,我如何告诉这个脚本跳过与FY相关的数字,比如FY13。所以我的最终结果应该是642013而不是13642013。

提前谢谢。

string input = "X_X_FY13_Template_X_6 4 13_V2.xlsx";
string result = Regex.Replace(input, @"[^'d]", "");
MessageBox.Show(result); 

从文件名中获取数字

如果您没有特别绑定到regex,您可以执行以下操作:

var input = "X_X_FY13_Template_X_6 4 13_V2.xlsx";
var chunks = input.Split(' ', '_'); // any separator characters
var numChunks = chunks.Where(chunk => chunk.All(char.IsDigit));
var result = String.Concat(numChunks);

从长远来看,它可能比所有的前视图/后视图更容易阅读/维护。

编辑:由于您已经过了日期(只要您愿意接受I18N风险)。。。

var date = String.Join("/", numChunks);

假设你的日期是唯一有空白的方面,你可以做这个

string input = "X_X_FY13_Template_X_6 4 13_V2.xlsx";
string result = input.Split('_').Where(x => x.Contains(' ')).FirstOrDefault();
if(!String.IsNullOrEmpty)
   result = result.Replace(" ","");

我会尝试用@"(''d{1-2})

看看这里http://msdn.microsoft.com/it-it/library/az24scfc.aspx#quantifiers记住点的意思是任何字符。

尝试:

string result = Regex.Replace(input, @"(FY'd+)?(V'd+)?[^'d]", "");

最简单的可能是:

var result = string.Concat(input.Skip(10).Where(Char.IsDigit));

但这是一个脆弱的解决方案(Skip(10)是硬编码的),所以我认为上面Andrew的解决方案更好。

        string input = "X_X_FY13_Template_X_6 4 13_V2.xlsx";
        Regex reg = new Regex(@"('d* 'd* 'd*)");
        Match match = reg.Match(input);
        Group group = match.Groups[1];
        string result = group.Value;

则结果变量将具有CCD_ 2值。