C# 如何修复open<';s不关闭>';s和C?

C# 如何修复open<';s不关闭>';s和C?,c#,html,regex,parsing,C#,Html,Regex,Parsing,我将C#与.NET4.5版本的HTML敏捷包一起使用。我必须能够导入大量不同的html文档,并且始终能够将它们加载到.NET XmlDocument中 我目前的问题是,我看到的html与此类似: <p class="s18">(4) if qual. ch ild <17 f or</p> (4)如果合格。中国日报 我遇到的问题是Regex.Matches()方法似乎并没有找到所有匹配项。它将找到一个匹配项,然后在第一个匹配项结束后查找下一个匹配项。这种

我将C#与.NET4.5版本的HTML敏捷包一起使用。我必须能够导入大量不同的html文档,并且始终能够将它们加载到.NET XmlDocument中

我目前的问题是,我看到的html与此类似:

<p class="s18">(4)   if qual. ch ild <17 f or</p>  

(4)如果合格。中国日报

我遇到的问题是Regex.Matches()方法似乎并没有找到所有匹配项。它将找到一个匹配项,然后在第一个匹配项结束后查找下一个匹配项。这种行为使得“哎呀,我爱你2”


在我看来,“Gee I love 2我用与上面相同的方法解决了我的问题,但是使用了一个修改的正则表达式

@"<[^<>/]+>(.*?)[<](.*?)<[^<>]+>" 

@”(*[首先/为什么/你有这样的HTML?将它们转换为HTML实体。遗憾的是,HAP不是一个很好的解析器。你可以尝试使用更好的解析器进行预处理。虽然我自己没有尝试过,但看起来很有希望。我有这样的HTML,因为在一个段落标记中,我正在处理的一个表单使用了一个“你能用
<;
不到20分钟吗?”?
<p>yo hi</p><p> Gee I love 1<'s<p> Gee I love 2<'s<p> Gee I love 3<'s</p></p></p><td name=\"\" /><p>bazinga ></p>  
private static string RemovePartialTags(string input)
    {
        Regex regex = new Regex(@"<[^<>/]+>(.*?)<[^<>]+>");
        string output = regex.Replace(input, delegate(Match m)
                {
                    string v = m.Value;

                    Regex reg = new Regex(@"<[^<>]+>");
                    MatchCollection matches = reg.Matches(v);
                    int locEndTag = v.IndexOf(matches[1].Value);

                    List<string> tokens = new List<string>
                            {
                                v.Substring(0, matches[0].Length),

                                v.Substring(matches[0].Length, locEndTag - matches[0].Length)
                                    .Replace(@"<", string.Empty)
                                    .Replace(@">", string.Empty)
                            };
                    tokens.Add(v.Substring(tokens[0].Length + (locEndTag - matches[0].Length)));

                    return tokens[0] + tokens[1] + tokens[2];
                }
            );

        return output;
    }  
@"<[^<>/]+>(.*?)[<](.*?)<[^<>]+>" 
private static string RemovePartialTags(string input)
    {
        Regex regex = new Regex(@"<[^<>/]+>(.*?)[<](.*?)<[^<>]+>");
        string output = regex.Replace(input, delegate(Match m)
                {
                    string v = m.Value;

                    Regex reg = new Regex(@"<[^<>]+>");
                    MatchCollection matches = reg.Matches(v);
                    int locEndTag = v.IndexOf(matches[1].Value);

                    List<string> tokens = new List<string>
                            {
                                v.Substring(0, matches[0].Length),

                                v.Substring(matches[0].Length, locEndTag - matches[0].Length)
                                    .Replace(@"<", string.Empty)
                                    .Replace(@">", string.Empty)
                            };
                    tokens.Add(v.Substring(tokens[0].Length + (locEndTag - matches[0].Length)));

                    return tokens[0] + tokens[1] + tokens[2];
                }
            );

        return output;
    }