【问题标题】:Regex - loop through matches正则表达式 - 循环匹配
【发布时间】:2014-03-06 17:32:16
【问题描述】:

我正在解析一个 sgml 文件。每个条目都是这样的:

<key n=1>xzsd:test
    <sk id=1 hi=1>test
        <tag1>.............</tag1>
        <tag2>.............</tag2>
         ................
    </sk>
    <sk id=2>test2
        <tag1>.............</tag1>
        <tag2>.............</tag2>
         ................
    </sk>
</key>

我想用一些 HTML 标记替换 &lt;key n=1&gt;...&lt;/key&gt;。我目前正在逐个标签替换标签,但只检索&lt;key&gt; 标签内的所有内容可能会更有效。

如何编译这段代码:

entry = Regex.Replace(entry, "<key .*?>.*</key>", "<div class='key'>$2<div>");//Only interested in the second match.
Regex skReg = new Regex(@"<sk...>", RegexOptions.Compiled);
foreach (Match ItemMatch in ItemRegex.Matches(entry))
{
       //Do parsing of contents of each sk tag
}

sgml 没有任何换行符

【问题讨论】:

标签: c# regex sgml


【解决方案1】:

这样就可以了:

            var entry = "<key n=1>xzsd:test <sk id=1 hi=1>test <tag1>.............</tag1> <tag2>.............</tag2> ................ </sk> <sk id=2>test2 <tag1>.............</tag1> <tag2>.............</tag2> ................ </sk> </key>";

        string pattern = "<key .*?>(.*)</key>";
        Match match = Regex.Match(entry, pattern);
        while (match.Success)
        {
            Console.WriteLine("Found: {0}",
                              match.Groups[1].Value); //find only what is in (.*)
            match = match.NextMatch();
        }

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 2012-10-03
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多