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