26
2015
07

【C#、Asp.Net 工具类大全】正则匹配工具类

public class MatchHelper
{
    /// <summary>
    /// 正则匹配结果集中的第一个匹配项
    /// </summary>
    /// <param name="regularString">进行匹配的字符串集</param>
    /// <param name="regularExpressions">正则表达式规则</param>
    /// <param name="isSubScalar">isSubScalar默认值为 1 ,为 0 时匹配第一项不为空的项,为 1 时匹配第一项不为空的子项,该参数可以忽略。</param>
    /// <returns></returns>
    internal static string MatchScalar(string regularString, string regularExpressions, int isSubScalar = 1)
    {
        string returnVal = "";
        try
        {
            MatchCollection M = Regex.Matches(regularString, regularExpressions);
            foreach (Match m in M)
            {
                for (int i = isSubScalar; i < m.Groups.Count; i++)
                {
                    returnVal = m.Groups[i].Value;
                    if (returnVal == "")
                    {
                        continue;
                    }
                    else
                    {
                        return returnVal;
                    }
                }
            }
            return returnVal;
        }
        catch (Exception ee)
        { 
            return "";
        }
    }
    /// <summary>
    /// 根据正则表达式匹配出所有的符合条件的字符串。
    /// <para>结果将以 DataTable 类型返回。</para>
    /// </summary>
    /// <param name="regularString">待匹配的字符集合。</param>
    /// <param name="regularExpressions">正则表达式。</param>
    /// <param name="isSubDt">isSubDt默认值为 1 ,为 0 时匹配所有符合条件项,为 1 时匹配所有符合条件子项,该参数可以忽略。</param>
    /// <returns>DataTable</returns>
    internal static DataTable MatchDt(string regularString, string regularExpressions, int isSubDt = 1)
    {
        try
        {
            DataTable dt = new DataTable();
            MatchCollection M = Regex.Matches(regularString, regularExpressions);
            if (M.Count <= 0) return dt;
            foreach (Match m in M)
            {
                var dr = dt.NewRow();
                for (var i = isSubDt; i < m.Groups.Count; i++)
                {
                    if (dt.Columns.Count <= 0)
                    {
                        for (var k = isSubDt; k < m.Groups.Count; k++)
                        {//创建列名
                            dt.Columns.Add("匹配项" + (k + 1));
                        }
                    }
                    if (isSubDt == 1)
                        dr[i - 1] = m.Groups[i].Value;
                    else
                        dr[i] = m.Groups[i].Value;
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }
        catch (Exception ee)
        { 
            return null;
        }
    }
    /// <summary>
    /// 根据正则表达式匹配出所有的符合条件的字符串。
    /// <para>结果将以 List 类型返回。</para>
    /// </summary>
    /// <param name="regularString">待匹配的字符集合。</param>
    /// <param name="regularExpressions">正则表达式规则。</param>
    /// <param name="isFilterRepetition">isFilterRepetition默认值为 1 ,表示过滤掉重复的项,为 0 时表示不过滤掉</param>
    /// <param name="isSubLists">isSubLists默认值为 1 ,为 0 时匹配所有符合条件项,为 1 时匹配所有符合条件子项,该参数可以忽略。</param>
    /// <param name="isContainEmptyValue">isContainEmptyValue默认值为 0 ,为 0 时过滤掉值为空的项,为 1 时包含值为空的项,该参数可以忽略。</param>
    /// <returns>List</returns>
    internal static List<string> MatchLists(string regularString, string regularExpressions, int isFilterRepetition = 1, int isSubLists = 1, int isContainEmptyValue = 0)
    {
        try
        {
            if (regularString == null) throw new ArgumentNullException("regularString");
            if (regularExpressions == null) throw new ArgumentNullException("regularExpressions");
            var list = new List<string>();
            MatchCollection M = Regex.Matches(regularString, regularExpressions);
            if (M.Count <= 0) return list;
            foreach (Match m in M)
            {
                for (var i = isSubLists; i < m.Groups.Count; i++)
                {
                    var val = m.Groups[i].Value;
                    if (isContainEmptyValue == 0)
                    {
                        if (val.Length <= 0) continue;
                    }
                    if (isFilterRepetition == 1)
                    {
                        if (!list.Contains(val))
                        {
                            list.Add(val);
                        }
                    }
                    else
                    {
                        list.Add(val);
                    }
                }
            }
            return list;
        }
        catch (Exception ee)
        { 
            return null;
        }
    }
}


« 上一篇下一篇 »

评论列表:

1.龙速微信投票  2015/8/26 14:04:15 回复该留言
还需要多多学习!感谢博主!
2.胜达SEO博客  2017/7/7 10:07:30 回复该留言
博主代码很历害的样子,留言支持,欢迎回访我的网站

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。