所以说我有一些像这样的图像标签的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#,如果这有所不同......
我将永远感激,并以你的方式发送一些非常好的业力。 :)
答案 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}}或">
,再次使用任何空格组合,并将其替换为虚无。