【发布时间】:2010-03-05 20:27:10
【问题描述】:
让我们说一个有这样一个字符串:
string txt = "Lore ipsum {{abc|prop1=\"asd\";prop2=\"bcd\";}} asd lore ipsum";
我要提取的信息是 "abc" 和 ("prop1","asd") , ("prop3", "bcd") 之类的对,其中每对都使用 a ;作为分隔符。
Edit1:(基于 MikeB 的)代码
啊,接近了。我发现了如何解析以下内容:
string txt = "Lore ipsum {{abc|prop1=\"asd\";prop2=\"http:///www.foo.com?foo=asd\";prop3=\"asd\";prop4=\"asd\";prop5=\"asd\";prop6=\"asd\";}} asd";
Regex r = new Regex("{{(?<single>([a-z0-9]*))\\|((?<pair>([a-z0-9]*=\"[a-z0-9.:/?=]*\";))*)}}", RegexOptions.Singleline | RegexOptions.IgnoreCase);
Match m = r.Match(txt);
if (m.Success)
{
Console.WriteLine(m.Groups["single"].Value);
foreach (Capture cap in m.Groups["pair"].Captures)
{
Console.WriteLine(cap.Value);
}
}
问题 1:我必须如何调整正则表达式以说出“仅由 \”分隔的对的每个值?我添加了像 '.',';' 这样的字符等等,但我想不出我想允许的任何字符。反过来会更好。
问题 2:我必须如何调整这个正则表达式与这个东西在这里的工作?
string txt = "Lore ipsum {{abc|prop1=\"asd\";prop2=\"http:///www.foo.com?foo=asd\";prop3=\"asd\";prop4=\"asd\";prop5=\"asd\";prop6=\"asd\";}} asd lore ipsum {{aabc|prop1=\"asd\";prop2=\"http:///www.foo.com?foo=asd\";prop3=\"asd\";prop4=\"asd\";prop5=\"asd\";prop6=\"asd\";}}";
因此,我可能会尝试获取 {{...}} 组并使用其他正则表达式?
【问题讨论】:
-
我更新了我的答案。我觉得现在说得通了!
-
确实是废话!该正则表达式将匹配任何包含七个字母的字符串——一切都是可选的。我将它应用于“匹配”这个词,它打印了最后五个字母,每行一个。幸运的是,@MikeB 的(已编辑)答案更有意义。