C# 从文件名中获取数字

C# 从文件名中获取数字,c#,regex,ssis,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); 尝试: 如果您没

我试图从文件名中获取日期,所以我构建了这个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); 
尝试:


如果您没有特别绑定到正则表达式,您可以这样做:

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);
从长远来看,它可能比所有的look ahead/look back更容易阅读/维护

编辑:因为您在日期之后(只要您愿意接受I18N风险)

最简单的可能是:

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

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

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

看看这里 记住点代表任何字符

        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
值。

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

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

您的“字符串输入”格式是否每次都相同?是的,先生,如果不是,我们会将其发送回企业:)谢谢各位,你们都是非常优秀的答案@user1570210-这将删除每个下划线分隔字符串中的所有“混合”数字,没有数字字符,我认为这是您希望执行的操作的更一般形式。也许您也可以只在下划线上拆分,但修改
IsDigit
检查以允许空格。我对C#不太熟悉,但也许它会像
chunk一样简单。All(char.IsDigit | char.IsSpace)
@acheong87:你可以使用
chunk.All(C=>char.IsDigit(C)| char.IsWhitespace(s))
来完成你所描述的事情。你的答案正好给出了他所说的结果,而不是他所要的结果。@Andrewchonce修复了这个问题(添加了
Skip()
        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;
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(" ","");