从文件名中获取Numbers

时间:2013-07-30 17:31:46

标签: c# regex ssis

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

提前致谢。

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

6 个答案:

答案 0 :(得分:5)

如果你没有特别依赖正则表达式,你可以这样做:

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);

答案 1 :(得分:2)

我会尝试将整个日期与@"((\ d {1-2})匹配。(\ d {1-2})。(\ d {2-4}))&# 34;

看一看http://msdn.microsoft.com/it-it/library/az24scfc.aspx#quantifiers 请记住,点表示任何字符。

答案 2 :(得分:2)

假设您的日期是唯一具有空格的方面,您可以这样做

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(" ","");

答案 3 :(得分:1)

尝试:

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

答案 4 :(得分:1)

最简单的可能是:

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

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

答案 5 :(得分:1)

        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;

结果变量的值为6 4 13