我有模式字符串:“ Hello {Name},欢迎来到{Country} ”
和完整值字符串:“ Hello Scott,欢迎来到VietNam ”
如何提取{Name}和{Country}的值:
Name = Scott,国家/地区= VietNam
我已经看到一些正则表达式来解决此问题,但是我可以在这里应用模糊匹配吗?
例如,使用反向字符串“ Welcome to VietNam,Hello Scott ”,我们也必须更改正则表达式吗?
作为更通用的解决方案,您可以执行以下操作:
public Dictionary<string, string> GetMatches(string pattern, string source)
{
var tokens = new List<string>();
var matches = new Dictionary<string, string>();
pattern = Regex.Escape(pattern);
pattern = Regex.Replace(pattern, @"\\{.*?}", (match) =>
{
var name = match.Value.Substring(2, match.Value.Length - 3);
tokens.add(name);
return $"(?<{name}>.*)";
});
var sourceMatches = Regex.Matches(source, pattern);
foreach (var name in tokens)
{
matches[name] = sourceMatches[0].Groups[name].Value;
}
return matches;
}
该方法从模式中提取标记名称,然后用名为捕获组的正则表达式的等效语法替换标记。接下来,它将修改后的模式用作正则表达式以从源字符串中提取值。最后,它使用捕获的令牌名称和命名的捕获组来构建要返回的字典。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句