Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式删除图像标记中除src之外的所有内容_C#_Regex - Fatal编程技术网

C# 使用正则表达式删除图像标记中除src之外的所有内容

C# 使用正则表达式删除图像标记中除src之外的所有内容,c#,regex,C#,Regex,我想使用正则表达式删除图像标记中除src之外的所有内容。我使用的是C,但我不想使用HTMLAgilityPack,我只想使用正则表达式。 如何得到这个? 如果字符串为,则返回为 图像标记可能包含许多其他额外属性。为了澄清我的评论:通常我不建议使用正则表达式解析HTML。然而,这是为数不多的不以灾难性的复杂正则表达式字符串结尾的情况之一,因为这里有一个节点,有一对匹配的尖括号。此外,OP只需要此字符串中的一个标记。如果他需要做更复杂的事情,我同意他应该使用HTMLAgilityPack,但这是完全

我想使用正则表达式删除图像标记中除src之外的所有内容。我使用的是C,但我不想使用HTMLAgilityPack,我只想使用正则表达式。 如何得到这个? 如果字符串为,则返回为
图像标记可能包含许多其他额外属性。

为了澄清我的评论:通常我不建议使用正则表达式解析HTML。然而,这是为数不多的不以灾难性的复杂正则表达式字符串结尾的情况之一,因为这里有一个节点,有一对匹配的尖括号。此外,OP只需要此字符串中的一个标记。如果他需要做更复杂的事情,我同意他应该使用HTMLAgilityPack,但这是完全可行的

您要做的是使用以下正则表达式从字符串中提取标记:src=['\].+?['\]。然后将从字符串中提取的内容粘贴到新字符串中:

String newImgTag = String.Format("<img {0}>", srcMatch);
同样,如果这更复杂,或者如果我必须进行其他HTML操作,我会跳过正则表达式,选择前面提到的HTMLAgilityPack之类的已建立的解决方案,因为它为HTML操作提供了更多的支持

然而,我不认为这是HTML操作,因为您得到了一个标记,甚至没有匹配的结束标记。这更像是基本的字符串操作。这类似于计算一个二次方的数字:我怀疑有人会为了这个而导入整个数学库,他们只会做N*N


我完全期待并接受人们甚至会因为我考虑使用正则表达式而否决我。然而,在你这么做之前,请阅读这篇文章并思考一下。这是一种临界情况,在这种情况下,HTMLAgilityPack将使项目变得更加复杂,而不实际添加任何内容,除非您没有使用正则表达式。Regex有它的用途,只有当你滥用它时,它才会变成一个怪物。

我不想使用HTMLAgilityPack,我只想使用Regex。你真的应该解释为什么你不想使用正常情况下正确的工作工具。否则,你要求我们解决一个完美的图书馆已经解决的问题,没有明显的原因。@dan1111通常,我会同意你的意见。但是,这并不是在整个HTML页面上真正匹配,而是仅在已经提取的单个节点中匹配。此外,所有需要匹配的是src=test.png,因为您可以简单地将其放入新的HTML标记中。这是一个非常简单的匹配:src=\.\。如果他不需要HTMLAgilityPack来做任何其他事情,只是为了匹配这个标签,我认为仅仅为了从一个节点中提取一个标签而添加它就太过分了。但是,如果他需要做更多的工作,我同意他应该采用既定的解决方案。@NateKerkhofs,除非src标记不是最后一个标记。或者使用单引号。src=['\].+['\]同时使用单引号和双引号。我的正则表达式已经不关心src标记的位置了。更正:它确实关心它。只要让它不贪婪:src=['\].+?['\]我还是不相信。这可能会以多种方式破坏脚本标记中的src属性、注释中的破坏内容、显示HTML源代码的页面等。可能会对OP的输入数据起作用,但同样,可能不会。我们对这项任务了解不够,所以我要求澄清。我并不坚决反对在HTML上使用正则表达式。有些任务需要快速而肮脏的方法。但如果没有更多的信息,就不清楚这是否合适。大多数问这样问题的人真的应该使用解析器。@dan1111我同意你的意见。然而,我所能得到的答案就是这个示例字符串。根据OP所说的,一个字符串包含一个带有src属性和任意数量的其他属性的图像标记,一个简单的正则表达式就足够了。他并不是要求使用正则表达式处理整个DOM元素树。他也可能有不使用解析器的正当理由。他可能处于一个封闭的环境中,患有非发明于此综合症。他可以在一个非常小的项目上工作,在这个项目中,解析器将显著增加项目的大小。