-
字符串匹配提取作者 : 管理员 发布于 2023-04-25 23:08:47 浏览 650 次
字符串匹配,提取用的都是正则表达式来实现的,首先先看一下扩展方法,如下:
/// <summary> /// 字符串匹配模式 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">格式</param> /// <param name="options">表达式选项</param> /// <returns></returns> public static Boolean IsMatch(this string _, string pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 字符串不匹配 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">格式</param> /// <param name="options">表达式选项</param> /// <returns></returns> public static Boolean IsNotMatch(this string _, string pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。 /// </summary> /// <param name="_">要搜索匹配项的字符串</param> /// <param name="pattern">要匹配的正则表达式模式</param> /// <param name="options">枚举值的一个按位组合,这些枚举值提供匹配选项</param> /// <returns>一个包含有关匹配的信息的对象</returns> public static Match Match(this String _, String pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 使用指定的匹配选项在指定的输入字符串中搜索指定的正则表达式的所有匹配项 /// </summary> /// <param name="_">要搜索匹配项的字符串</param> /// <param name="pattern">要匹配的正则表达式模式</param> /// <param name="options">枚举值的一个按位组合,这些枚举值提供匹配选项</param> /// <returns>搜索操作找到的 System.Text.RegularExpressions.Match 对象的集合。 如果未找到匹配项,则此方法将返回一个空集合对象</returns> public static MatchCollection Matches(this String _, String pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 提取符合模式的数据 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">模式</param> /// <param name="options">表达式选项</param> /// <returns></returns> public static string GetMatch(this String _, String pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 提取符合模式的数据 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">模式</param> /// <param name="options">表达式选项</param> /// <returns></returns> public static Dictionary<string, string> GetMatchs(this String _, string pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 提取符合模式的数据 /// </summary> /// <param name="_">字串</param> /// <param name="pattern">模式</param> /// <param name="options">表达式选项</param> /// <returns></returns> public static List<Dictionary<string, string>> GetMatches(this String _, string pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 提取符合模式的数据 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">模式</param> /// <param name="options">表达式选项</param> /// <returns></returns> public static List<string> GetPatterns(this string _, string pattern, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 替换模式 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">模式</param> /// <param name="replaceMent">替换值</param> /// <param name="options">模式选项</param> /// <returns></returns> public static string ReplacePattern(this string _, string pattern, string replaceMent = "", RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 替换模式 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">模式</param> /// <param name="m">方法操作过程中每当找到正则表达式匹配时都调用的方法</param> /// <param name="options">模式选项</param> /// <returns></returns> public static string ReplacePattern(this string _, string pattern, MatchEvaluator m, RegexOptions options = RegexOptions.IgnoreCase) /// <summary> /// 移除模式 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">模式</param> /// <param name="options">模式选项</param> /// <returns></returns> public static string RemovePattern(this string _, string pattern, RegexOptions options = RegexOptions.IgnoreCase)=>_.ReplacePattern(pattern, "", options); /// <summary> /// 拆分字符串为数组 /// </summary> /// <param name="_">字符串</param> /// <param name="pattern">模式</param> /// <param name="options">模式选项</param> /// <returns></returns> public static string[] SplitPattern(this String _, string pattern, RegexOptions options = RegexOptions.IgnoreCase)
下边一一介绍上边几个扩展方法的用法及用途
IsMatch 当前扩展方法 主要是 当前字符串是否匹配上正则表达式,比如,匹配当前字符串是否是QQ号码,代码如下:if("7092734".IsMatch(@"^\d{5-11}$")) Console.WriteLine("是QQ号码格式."); else Console.WriteLine("非QQ号码格式.");
输出结果为:是QQ号码格式.
因为 字符串 “7092734”确实是QQ号码。
IsNotMatch 当前方法其实就是 !IsMatch,用法和IsMatch用法一样。
Match 当前扩展方法返回的是Match,使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。
Matches 当前扩展方法返回的是使用指定的匹配选项在指定的输入字符串中搜索指定的正则表达式的所有匹配项。
这三个方法是最原始最底层的方法,其它扩展都基于当前三个方法中的一个或两个来实现的。
GetMatch 扩展方法返回结果是:提取符合模式的数据所匹配的第一个匹配项所匹配的第一项或a组的数据
GetPatterns 扩展方法返回结果是:提取符合模式的数据所有匹配的第一项数据或a组数据
GetMatchs 扩展方法返回结果是:提取符合模式的数据所匹配的第一项中所有组数据
GetMatches 扩展方法返回结果是:提取符合模式的数据所有匹配项或所有组数据
提取的数据量对比:GetMatchReplacePattern 扩展方法用途是 使用 正则达式 来替换数据 下边通过实例来讲解这几个方法的使用及返回结果的区别:
var a = "abc4d5e6hh5654".GetMatch(@"\d+"); a的值为:"4"; var b = "abc4d5e6hh5654".GetPatterns(@"\d+"); b的值为:["4","5","6","5654"]; var c = "abc4d5e6hh5654".GetMatchs(@"(?<a>[a-z]+)(?<b>\d+)"); c的值为:{{"a","abc"},{"b","4"}}; var d = "abc4d5e6hh5654".GetMatches(@"(?<a>[a-z]+)(?<b>\d+)"); d的值为:[{{"a","abc"},{"b","4"}},{{"a","d"},{"b","5"}},{{"a","e"},{"b","6"}},{{"a","hh"},{"b","5654"}}] var g = "a6b9c53".ReplacePattern(@"\d+","g"); g的值为:"agbgcg"; var h = "a6b7c56".RemovePattern(@"\d+"); h的值为:"abc"; var i = "a1b2c3".ReplacePattern(@"\d+",m=>{ var a = a.Groups["a"].Value; if(a == "1")return "a1"; else return "a2"; }); i的值为:"aa1ba2ca2";
所有评论(0)