zoukankan      html  css  js  c++  java
  • Use a String.Format format and transform its output to its inputs?

    ParseExact for Strings?

     

    The DateTime.ParseExact() method has come in handy on a number of occasions. I really wish there was something similar for strings as sometimes you need to grab specific components of a string. You can use regex directly but that seems a little cumbersome. So here is an extension method that works like the DateTime.ParseExact() but returns an array of strings.

    string value = "2/17/2009 10:57:42 AM...Executing file 26 of 81 files";
    string[] parts = value.ParseExact("{0}...Executing file {1} of {2} files");
    foreach (string part in parts)
        Console.WriteLine(part);
    Console.ReadKey();
    image 

    Implementation:

    public static class StringExtensions
    {
        public static string[] ParseExact(
            this string data, 
            string format)
        {
            return ParseExact(data, format, false);
        }
    
        public static string[] ParseExact(
            this string data, 
            string format, 
            bool ignoreCase)
        {
            string[] values;
    
            if (TryParseExact(data, format, out values, ignoreCase))
                return values;
            else
                throw new ArgumentException("Format not compatible with value.");
        }
    
        public static bool TryExtract(
            this string data, 
            string format, 
            out string[] values)
        {
            return TryParseExact(data, format, out values, false);
        }
    
        public static bool TryParseExact(
            this string data, 
            string format, 
            out string[] values, 
            bool ignoreCase)
        {
            int tokenCount = 0;
            format = Regex.Escape(format).Replace("\\{", "{");
    
            for (tokenCount = 0; ; tokenCount++)
            {
                string token = string.Format("{{{0}}}", tokenCount);
                if (!format.Contains(token)) break;
                format = format.Replace(token,
                    string.Format("(?'group{0}'.*)", tokenCount));
            }
    
            RegexOptions options = 
                ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None;
    
            Match match = new Regex(format, options).Match(data);
    
            if (tokenCount != (match.Groups.Count - 1))
            {
                values = new string[] { };
                return false;
            }
            else
            {
                values = new string[tokenCount];
                for (int index = 0; index < tokenCount; index++)
                    values[index] = 
                        match.Groups[string.Format("group{0}", index)].Value;
                return true;
            }
        }
    }
    
    原帖:
    http://blog.mikeobrien.net/2009/02/parseexact-for-strings.html
  • 相关阅读:
    jquery的一些函数
    int ,long,long long范围
    DMZ
    C读取文件(如果你不知道文件内容SIZE)
    flot画饼图
    flot绘制折线图
    JS操作select相关方法:新增 修改 删除 选中 清空 判断存在
    JS-字符串操作
    websGetVar函数
    AJAX之XMLHTTPRequest对象
  • 原文地址:https://www.cnblogs.com/leon032/p/2453595.html
Copyright © 2011-2022 走看看