项目开发中和第三方系统API对接经常会涉及到json数据的解析问题、使用正则可以快速匹配到关键字值
/// <summary>
/// 正则表达式
/// </summary>
private class RegexMatch {
/// <summary>
/// 在输入字符串中搜索pattern参数中提供的一个或多个文本
/// </summary>
/// <param name="s"></param>
/// <param name="p"></param>
/// <param name="i"></param>
/// <returns></returns>
public static string Match(string s, string p, int i = 0) {
if (string.IsNullOrEmpty(s) || string.IsNullOrEmpty(p)) return string.Empty;
var match = Regex.Match(s, p);
if (i < match.Groups.Count) return match.Groups[i].Value;
i = 0;
return match.Groups[i].Value;
}
/// <summary>
/// 字符串
/// </summary>
/// <param name="str"></param>
/// <param name="name"></param>
/// <returns></returns>
public static string Getstring(string str, string name) { return Match(str, "\"" + name + @""":""([^""]+)", 1); }
/// <summary>
/// 数值
/// </summary>
/// <param name="str"></param>
/// <param name="name"></param>
/// <returns></returns>
public static string Getmoney(string str, string name) { return Match(str, "\"" + name + @""":""?([\-\d\.]+)", 1); }
}
var str = "<tem:PresentApplicationJson>?</tem:PresentApplicationJson>11111";
str = GetTitleContent(str, "tem:PresentApplicationJson");
/// <summary>
/// 获取字符中指定标签的值
/// </summary>
/// <param name="str">字符串</param>
/// <param name="title">标签</param>
/// <returns>值</returns>
public static string GetTitleContent(string str, string title) {
string tmpStr = string.Format("<{0}[^>]*?>(?<Text>[^<]*)</{1}>", title, title); //获取<title>之间内容
Match TitleMatch = Regex.Match(str, tmpStr, RegexOptions.IgnoreCase);
string result = TitleMatch.Groups["Text"].Value;
return result;
}
/// <summary>
/// 获取字符中指定标签的值
/// </summary>
/// <param name="str">字符串</param>
/// <param name="title">标签</param>
/// <param name="attrib">属性名</param>
/// <returns>属性</returns>
public static string GetTitleContent(string str, string title,string attrib)
{
string tmpStr = string.Format("<{0}[^>]*?{1}=(['\"\"]?)(?<url>[^'\"\"\\s>]+)\\1[^>]*>", title, attrib); //获取<title>之间内容
Match TitleMatch = Regex.Match(str, tmpStr, RegexOptions.IgnoreCase);
string result = TitleMatch.Groups["url"].Value;
return result;
}