使用C#正则表达式排除字符串匹配

3

我是正则表达式的新手。我正在尝试查找没有边框的图像。因此,结果应该是第二张图片。使用正则表达式匹配的文本如下。

<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)]*>

So can any one help on this please?


1
str.indexOf("BORDER")将在第二个字符串中返回-1。你可以使用它。你把这三个语句都放在同一个变量里了吗? - madhairsilence
3个回答

4

1
@goldenparrot 他正在尝试解决一个问题。正则表达式是一种解决方案,这是另一种。 - default

2
更好的选择是使用HTML解析器来解决这个问题。
但你在这里的主要正则表达式问题是将你的前瞻放入了一个字符类中,因此所有字符都被视为字面字符。
<IMG\s(?:(?!BORDER)[^>])*>

应该可以更好地工作。 在Regexr上查看

但这仅用于解释您的正则表达式问题。要解决您的编程任务,请使用L.B答案

工作示例:

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();

@L.B,你是什么意思?你看过Regexr的例子吗? - stema
是的,它显示“0个捕获组:”。 - L.B
当然,我的正则表达式中没有捕获组。整个正则表达式匹配完整的两行/标记。 - stema
@Prasadthankappan,如果我的解决方案有效,但不能解决您的问题,那么您的问题是什么? - stema
嗨Stema,我认为你的解决方案有效。顺便说一下,我的问题还没有解决。我还需要检查一个条件。即,图像可能还包含ALT =“”属性。例如<IMG onerror =“this.errored = true;” USEMAP =“#Map-43” ALT =“”/>。因此,要求是查找具有ALT或两者都没有(ALT和BORDER)的图像。提前致谢。 - Prasad thankappan
显示剩余4条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接