使用c#regex排除字符串匹配
我不熟悉正则表达式。我正在努力寻找没有边界的图像。因此,结果应该是第二个图像。下面是试图使用正则表达式进行匹配的文本使用c#regex排除字符串匹配,c#,html,regex,string,negative-lookahead,C#,Html,Regex,String,Negative Lookahead,我不熟悉正则表达式。我正在努力寻找没有边界的图像。因此,结果应该是第二个图像。下面是试图使用正则表达式进行匹配的文本 <IMG onerror="this.errored=true;" USEMAP="#Map-43" BORDER="0"/> <IMG onerror="this.errored=true;" USEMAP="#Map-43" /> <IMG onerror="this.errored=true;" USEMAP="#Map-43" BORDER=
<IMG onerror="this.errored=true;" USEMAP="#Map-43" BORDER="0"/>
<IMG onerror="this.errored=true;" USEMAP="#Map-43" />
<IMG onerror="this.errored=true;" USEMAP="#Map-43" BORDER="0"/>
我尝试了下面的正则表达式,但没有成功
<IMG\\s[^((>)&(?!BORDER)]*>
)&(?BORDER)]*>
有人能帮上忙吗?你可以用它来解析html
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var imgs = doc.DocumentNode.Descendants("img")
.Where(n => n.Attributes["border"] == null)
.ToList();
PS:另请参见:更好的选择是使用html解析器解决此类问题 但这里主要的正则表达式问题是,您将前瞻放在字符类中,这样所有字符都被视为文字字符
<IMG\s(?:(?!BORDER)[^>])*>
])*>
应该做得更好
但这只是为了解释你的正则表达式问题。要解决编程任务,请使用
工作示例:
String html = "<IMG onerror=\"this.errored=true;\" USEMAP=\"#Map-43\" BORDER=\"0\"/><IMG onerror=\"this.errored=true;\" USEMAP=\"#Map-43\" /><IMG onerror=\"this.errored=true;\" USEMAP=\"#Map-43\" BORDER=\"0\"/>";
Console.WriteLine(Regex.Matches(html, @"<IMG\s(?:(?!BORDER)[^>])*>").Cast<Match>().ToList()[0]);
Console.ReadLine();
String html=”“;
Console.WriteLine(Regex.Matches(html,@“)*>”).Cast().ToList()[0]);
Console.ReadLine();
另一种方法是使用jQuery和CSS选择器从客户端获取“无边框属性”图像:
$img = $('img').not('[border]');
链接:
0捕获组:
Yes当然,我的regex中没有捕获组。整个正则表达式与完整的2行/标记匹配。regex.matches(html,@“])*>“”.Cast().ToList()
还提供0个匹配项。我添加了工作代码,使用的代码行非常准确,我不理解您的问题。@goldenparrot他正在尝试解决一个问题。regexp是一种解决方案,这是另一种。