【问题标题】:Get Numbers from file name从文件名中获取数字
【发布时间】:2013-07-30 17:31:46
【问题描述】:

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

【问题讨论】:

  • 你的“字符串输入”的格式每次都一样吗?
  • 是的,先生,如果没有,我们会将其送回营业:)
  • 谢谢你们,你们都很棒

标签: c# regex ssis


【解决方案1】:

如果您没有特别依赖于正则表达式,您可以执行以下操作:

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

【讨论】:

  • 优秀的答案! @user1570210 - 这将删除所有与无数字字符“混合”的数字,每个下划线分隔的字符串,我认为这是您想要做的更一般的形式。
  • 也许您也可以只在下划线处拆分,但修改IsDigit 检查以允许空格。我对 C# 还不够熟悉,但可能就像chunk.All(char.IsDigit|char.IsSpace) 一样简单。
  • @acheong87:你可以使用chunk.All(c => char.IsDigit(c) || char.IsWhitespace(s)) 来做你所描述的事情
【解决方案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】:

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

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

    【讨论】:

      【解决方案4】:

      试试:

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

      【讨论】:

        【解决方案5】:

        最简单的可能是:

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

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

        【讨论】:

        • 您的回答准确地给出了他所说的不是他想要的输出。
        • @AndrewCoonce 已修复(添加 Skip()
        【解决方案6】:
                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 值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-03
          • 2013-11-23
          • 2017-09-09
          • 1970-01-01
          • 1970-01-01
          • 2014-04-25
          • 1970-01-01
          • 2012-09-19
          相关资源
          最近更新 更多