我有模式字符串:“{Name}您好,欢迎{国家}‘
和一个完整的字符串值:’您好斯科特,欢迎越南”
哪有我提取{Name}和{Country}的值:
Name = Scott,Country = VietNam
我已经看到一些正则表达式来解决这个问题,但我可以在这里应用模糊匹配吗?
例如用翻译字符串“欢迎来到越南,你好斯科特”,我们还必须改变正则表达式吗?获取字符串值
Q
获取字符串值
1
A
回答
1
作为一个更通用的解决方案,你可以这样做以下:
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;
}
该方法从图案中提取标记名称,然后替换具有与名为capture组的正则表达式具有相同语法的标记。接下来,它使用修改的模式作为正则表达式来提取源字符串中的值。最后,它使用捕获的令牌名称与指定的捕获组来构建要返回的字典。
+0
有史以来最好的解决方案! – phuongnd
3
您可以使用正则表达式:
var Matches = Regex.Matches(input, @"hello\s+?([^\s]*)\s*|welcome\s+?to\s+?([^\s]*)", RegexOptions.IgnoreCase);
string Name = Matches.Groups[1].Value;
string Country = Matches.Groups[2].Value;
更新:更改代码工作无论哪种方式。 Demo。
+1
更好的是,使用正则表达式从模板中提取标记并构建新的正则表达式,其中原始标记被替换为已命名的捕获组,并且字符串的其余部分将被转义。 – seairth
0
只是快速和肮脏的..
string pattern = "Hello Scott, welcome to VietNam";
var splitsArray = pattern.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
var Name = splitsArray[1].Replace(",", string.Empty);
var country = splitsArray[4];
相关问题
- 1. 从字符串获取值?
- 2. 获取值了值的字符串
- 3. 从字符串值文件夹中获取字符串数组?
- 4. 如何从包含“,”的字符串获取字符串值?
- 5. 获取字符串
- 6. 获取字符串
- 7. 获取字符串
- 8. 获取字符串
- 9. 获取字符串2个字符串
- 10. 从字符串获取子字符串__
- 11. 提取字符串的字符串值
- 12. 如何从字符串中获取值?
- 13. 通过字符串获取属性值
- 14. 无法从SharedPreferences获取字符串值
- 15. NSURL从字符串获取值
- 16. 在String类中获取字符串值
- 17. Gson - 从JSON字符串获取值
- 18. 获取查询字符串值... MVC3
- 19. 获取查询字符串值
- 20. 从字符串中获取价格值
- 21. Java从字符串获取整数值
- 22. 解析xml字符串并获取值
- 23. Flash ActionScript获取查询字符串值
- 24. 获取json值作为字符串?
- 25. iOS从NSNumberFormatter获取值字符串
- 26. PHP:如何获取此字符串值?
- 27. Umbraco - 获取文本字符串值
- 28. Linq - 从字符串中获取值
- 29. 获取字符串变量的值
- 30. 获取字符串类属性的值
我投票结束这个问题作为题外话,因为它不包含最小代码来重现问题。 –
我尝试过使用正则表达式,但实际的问题是如何以较少的改变表达式来提取值。 – phuongnd
@phuongnd更新后的答案,它将双向工作。 – 2016-08-02 03:17:20