2

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

6 回答 6

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);
于 2013-07-30T17:38:55.577 回答
2

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

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

于 2013-07-30T17:42:09.920 回答
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(" ","");
于 2013-07-30T18:23:56.670 回答
1

尝试:

string result = Regex.Replace(input, @"(FY\d+)?(V\d+)?[^\d]", "");
于 2013-07-30T17:38:15.380 回答
1

最简单的可能是:

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

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

于 2013-07-30T17:40:54.583 回答
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价值。

于 2013-07-30T17:51:15.100 回答