• I don't like Regex...


    refer to:http://www.codeproject.com/Articles/368258/I-dont-like-Regex

    字符串扩展方法类:

    using System;
    using System.Collections.Generic;
    using System.Text.RegularExpressions;
    
    namespace RegexExtract
    {
        static class StringExtract
        {
    
            public static bool Like(this string item, string searchPattern)
            {
                return GetRegex("^" + searchPattern).IsMatch(item);
            }
    
            public static string Search(this string item, string searchPattern)
            {
                var match = GetRegex(searchPattern).Match(item);
                if (match.Success)
                {
                    return item.Substring(match.Index, match.Length);
                }
                return null;
            }
    
            public static List<string> Extract(this string item, string searchPattern)
            {
                var result = item.Search(searchPattern);
                if (!string.IsNullOrWhiteSpace(result))
                {
                    var splitted = searchPattern.Split(new[] { '?', '%', '*', '#' }, StringSplitOptions.RemoveEmptyEntries);
                    var temp = result;
                    var final = new List<string>();
                    Array.ForEach(splitted, x =>
                    {
                        var pos = temp.IndexOf(x, StringComparison.Ordinal);
                        if (pos > 0)
                        {
                            final.Add(temp.Substring(0, pos));
                            temp = temp.Substring(pos);
                        }
                        temp = temp.Substring(x.Length);
                    });
                    if (temp.Length > 0) final.Add(temp);
                    return final;
                }
                return null;
            }
    
    
            // private method which accepts the simplified pattern and transform it into a valid .net regex pattern:
            // it escapes standard regex syntax reserved characters 
            // and transforms the simplified syntax into the native Regex one
            static Regex GetRegex(string searchPattern)
            {
                return new Regex(searchPattern
                        .Replace("\\", "\\\\")
                        .Replace(".", "\\.")
                        .Replace("{", "\\{")
                        .Replace("}", "\\}")
                        .Replace("[", "\\[")
                        .Replace("]", "\\]")
                        .Replace("+", "\\+")
                        .Replace("$", "\\$")
                        .Replace(" ", "\\s")
                        .Replace("#", "[0-9]")
                        .Replace("?", ".")
                        .Replace("*", "\\w*")
                        .Replace("%", ".*")
                        , RegexOptions.IgnoreCase);
            }
        }
    }
    

      测试用例:

    using System;
    
    namespace RegexExtract
    {
        class Program
        {
            static void Main()
            {
                //example: a string is a guid  
                var result = "TA0E02391-A0DF-4772-B39A-C11F7D63C495".Like("?????????-????-????-????-????????????"); 
                Console.WriteLine(result);
                //example: a string starts with a guid
                result = "This is a guid TA0E02391-A0DF-4772-B39A-C11F7D63C495".Like("%?????????-????-????-????-????????????");
                Console.WriteLine(result);
                //example: a string ends with a guid
                result = "TA0E02391-A0DF-4772-B39A-C11F7D63C495 is a guid".Like("?????????-????-????-????-????????????%");
                Console.WriteLine(result);
                //example: a string contains a guid
                result = "this string TA0E02391-A0DF-4772-B39A-C11F7D63C495 contains a guid".Like("%?????????-????-????-????-????????????%");
                Console.WriteLine(result);
    
                //example: Search for a guid inside a text
                var strResult =
                    "this string [TA0E02391-A0DF-4772-B39A-C11F7D63C495] contains a string matching".Search(
                        "[?????????-????-????-????-????????????]");
                Console.WriteLine(strResult); // output: [TA0E02391-A0DF-4772-B39A-C11F7D63C495]
    
                //example: retrieving the consituents of a guid inside a text
                var listResult =
                    "this string [TA0E02391-A0DF-4772-B39A-C11F7D63C495] contains a string matching".Extract(
                        "[?????????-????-????-????-????????????]");
                foreach (var str in listResult)
                {
                    Console.WriteLine(str);
                }
                // result is an array containing each part of the pattern: {"TA0E02391", "A0DF", "4772", "B39A", "C11F7D63C495"}
    
                //example: retrieving the consituents of an email inside a text
                listResult = "this string contains an email: toto@domain.com".Extract("*?@?*.?*");
                foreach (var str in listResult)
                {
                    Console.WriteLine(str);
                }
                // result is an array containing each part of the pattern: {"toto", "domain", "com"}
                Console.ReadKey();
            }
        }
    }
    

      

  • 相关阅读:
    数据更新
    MVC学习笔记
    const关键字同static readonly 的区别
    RSS
    C语言中取地址跟C++中的引用是一个意思吗?
    生产者消费者模式
    使用foreach的时候,不能对List进修改,怎么办?
    SQL查询
    Windows下的Java访问USB设备解决之道(翻译Java libusb / libusbwin32 wrapper)
    Java SE 6d新特性: 编译器 API
  • 原文地址:https://www.cnblogs.com/tewuapple/p/2833183.html
Copyright © 2020-2023  润新知