需要一个正则表达式来摆脱html图像标签文件名中的括号

时间:2010-01-29 23:30:15

标签: c# regex

所以说我有一些像这样的图像标签的HTML:

<p> (1) some image is below:
<img src="/somwhere/filename_(1).jpg">
</p>

我想要一个正则表达式,它将删除文件名中的括号,以便我的html看起来像这样:

<p> (1) some image is below:
<img src="/somwhere/filename_1.jpg">
</p>

有谁知道怎么做?我的编程语言是C#,如果这有所不同......

我将永远感激,并以你的方式发送一些非常好的业力。 :)

5 个答案:

答案 0 :(得分:1)

这个(相当密集的)正则表达式应该这样做:

string s = Regex.Replace(input, @"(<img\s+[^>]*src=""[^""]*)\((\d+)\)([^""]*""[^>]*>)", "$1$2$3");

答案 1 :(得分:1)

我怀疑你的工作会更容易,如果你使用HTML Agility可以帮助你做这个而不是正则表达式从答案判断,它将使你更容易解析HTML来实现你的目标正在努力做到。

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:1)

如果文件名始终与该格式匹配,则

Nick's solution没问题,但这个格式与属性中任何位置的任何括号匹配:

s = Regex.Replace(@"(?i)(?<=<img\s+[^>]*\bsrc\s*=\s*""[^""]*)[()]", "");

lookbehind确保匹配发生在src标记的img属性中。它假定该属性用双引号括起来(引号);如果你需要允许单引号(撇号)或根本没有引号,正则表达式会变得复杂得多。如果你需要,我会发布。

答案 3 :(得分:0)

在这种简单的情况下,您可以使用string.Replace,例如:

string imgFilename = "/somewhere/image_(1).jpg";
imgFilename = imgFilename.Replace("(", "").Replace(")", "");

或者您是否需要正则表达式来替换HTML字符串中的完整标记?

答案 4 :(得分:0)

Regex.Replace(some_input, @"(?<=<\s*img\s*src\s*=\s*""[^""]*?)(?:\(|\))(?=[^""]*?""\s*\/?\s*?>)", "");

查找以(开头的)<img src =",以及可选的文字(包含任何空格组合,但我不包含换行符),然后是可选文字和{{ 1}}或">,再次使用任何空格组合,并将其替换为虚无。