我们如何从以下字符串中获取数字7和4和5:
MODULE potmtpMAIN main <info: "Enterprise Optimizer 7.4 for COR Technology 5.5 --
Advanced Solver Edition", url:"http://EO.riverlogic.com", url_menu:"EO Online...",
app_id:"EOAS",app_name:"Enterprise Optimizer AS", app_major:7,
app_minor:4,app_micro:5,app_copyright:"\251 1996-2010 River Logic Inc.\r\nAll
Rights Reserved.">
Run Code Online (Sandbox Code Playgroud)
搜索必须基于app_major:app_minor:和app_micro
先感谢您
我使用LINQ做到了......可能不是最好的方法,但想出来很有趣:
string test = "<info:\"Enterprise Optimizer 7.4 for COR Technology 5.5 -- Advanced Solver Edition\", url:\"http://EO.riverlogic.com\", url_menu:\"EO Online...\", app_id:\"EOAS\",app_name:\"Enterprise Optimizer AS\", **app_major:7**, **app_minor:4**,**app_micro:5**,app_copyright:\"251 1996-2010 River Logic Inc.\r\nAll Rights Reserved.\">";
var result = test.Split(',').
Select(p => p.Trim().Split(':')).
Where(i => i[0].Trim().StartsWith("**app_")).
Select(r => new { Key = r[0].Trim('*'), Value = r[1].TrimEnd('*') });
Run Code Online (Sandbox Code Playgroud)
生产:
result = {{Key = "app_major", Value = "7"},
{Key = "app_minor", Value = "4"},
{Key = "app_micro", Value = "5"}}
Run Code Online (Sandbox Code Playgroud)
它甚至可能更优雅地完成:)
编辑:如果你想让访问你想做的事情变得非常简单:
var result = test.Split(',').
Select(p => p.Trim().Split(':')).
Where(i => i[0].Trim().StartsWith("**app_")).
Select(r => new { Key = r[0].Trim('*'), Value = r[1].TrimEnd('*') }).
ToDictionary(k => k.Key, v => v.Value);
Run Code Online (Sandbox Code Playgroud)
然后获取值,只需给它这样的键:
var version = result["app_major"] ?? "Not Found";
Run Code Online (Sandbox Code Playgroud)
注意:我已经测试了LINQ的解决方案VS正则表达式的解决方案和LINQ版本没有那么多在速度方面的差异,但是它比张贴的正则表达式的答案有点慢.正则表达式的答案虽然不能为您清理数据并以易于使用的方式呈现.该ToDictionary部分确实减慢了速度(虽然实际上几乎没有任何东西)但它确实使结果更容易使用.