C# 在文档中查找HTML字符串
我想在文档中获取所有HTMLC# 在文档中查找HTML字符串,c#,.net,html,regex,C#,.net,Html,Regex,我想在文档中获取所有HTML..。 使用Regex查找所有此类字符串,使用: Regex regex = new Regex(@"\<p\>([^\>]*)\</p\>", RegexOptions.IgnoreCase); Regex Regex=new Regex(@“\([^\>]*)\”,RegexOptions.IgnoreCase); 但是我没有得到任何结果。我的正则表达式有什么问题吗 现在,我只想获取..标记之间的所有内容,并希望使用正则表达式,因
..
。使用
Regex
查找所有此类字符串,使用:
Regex regex = new Regex(@"\<p\>([^\>]*)\</p\>", RegexOptions.IgnoreCase);
Regex Regex=new Regex(@“\([^\>]*)\”,RegexOptions.IgnoreCase);
但是我没有得到任何结果。我的正则表达式有什么问题吗
现在,我只想获取
..标记之间的所有内容,并希望使用正则表达式,因为源代码不是HTML文档。使用正则表达式不是最好的主意。我建议读这篇文章:
!!!
相反,使用
例如:
var doc = new HtmlDocument();
doc.Load(...);
var pTags = doc.DocumentNode.Descendants("p");
编辑:即使文档实际上不是HTML,也可以这样做。使用正则表达式匹配HTML元素的方法注定会失败。正则表达式不能可靠地匹配HTML元素。可以构建一个比正则表达式更复杂的HTML元素
例如,我可以用以下方法击败你的正则表达式
<p>hello<p>again</p></p>
又是你好
您需要使用HTML(或者可能是XML)解析器/DOM,而不是使用正则表达式。这是可靠地查询HTML文件的唯一方法
详细解释原因:
虽然其他人说不应该使用正则表达式执行此操作,您失败的原因是您的
标记之间有更多的HTML,您排除
会导致正则表达式不匹配。您要求它,但除非您控制100%的HTML生成,否则确实不要使用正则表达式执行此操作
public static Regex regex = new Regex(
"(?<open>\\<p(?<attr>[^>])*\\>)(?<content>.*)\\</p(?:\\s*)\\>",
RegexOptions.Multiline
| RegexOptions.CultureInvariant
| RegexOptions.Compiled
);
publicstaticregex Regex=newregex(
“(?\\@”(?is)(?>(?:(?!)))*)”
(?:(?!)*
一次匹配一个字符,在进行前瞻以确保它不是或标记的一部分之后
(?>…)
是一个函数;它防止我们知道毫无意义的回溯
(?is)
是指定匹配修饰符的另一种机制——在本例中为IgnoreCase和Singleline(如果标记之间存在换行符或回车符,则为后者,这是多余的,但您确实说过它不是真正的HTML)
顺便说一句,
在正则表达式中没有特殊意义,因此没有必要对它们进行转义。事实上,你可以通过转义赋予它们特殊意义:\
分别表示“单词的开头”和“单词的结尾”。但在.NET正则表达式中,反斜杠只是杂乱无章的。请参见:将找不到的文本。
如果您仍然不介意忽略父p标记中的所有p标记,则将文本“([^\>]*)”替换为“(.*)”“。这将匹配标签中的所有字符。请注意,您不会使用此方法匹配所有p标签。我喜欢链接的答案如何成为一种迷因。这一主题的持续性让我感到惊讶。而且90+代表是多么容易获得…:-)事实上,在达到上限之前,我从这个答案中只得到了55个重复。我只想得到..标记之间的所有内容。什么是适合这个的正则表达式?@inutan——没有一个正则表达式可以100%工作。请参阅JaredPar的帖子。
<p>hello world</p>
<p style="Foo"></p >
<p>who nests paragraphs <p>in 2010?</p> </p >
<p /><p><a href="http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454">TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ</a></p><p/>
"hello world"
""
"who nests paragraphs <p>in 2010?</p>"
"<p><a href="http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454">TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ</a>"
@"(?is)<p>(?>(?:(?!</?p>).)*)</p>"