如何替换内部字符串正则表达式

时间:2011-06-17 06:48:05

标签: c# regex

我有以下代码段, 搜索条件是找到所有 img 标记 id =“someImage”

<img id="someImage" src="C:\logo.png" height="64" width="104" alt="myImage" />

我想替换

src="C:\logo.png" to src="someothervalue"

所以最终的输出是

<img id="someImage" src="C:\someothervalue" height="64" width="104" alt="myImage" />

如何使用正则表达式实现此目的。

谢谢。

2 个答案:

答案 0 :(得分:1)

将正则表达式用于XML并不是一个好主意。根据您应该使用某些XML阅读器的语言,提取<img>节点然后获取其ID。许多XML库支持的一种用于查询XML数据的有用语言是XPath。

在C#中,您可以查看XmlDocument类(及相关类)。

另一个是XmlReader

后者仅提供顺序访问,而第一个提供整个树在内存中,因此第一个更容易使用(特别是如果您的XML内容不是太大)。

答案 1 :(得分:1)

您可以在正则表达式中使用群组。您可以在正则表达式中使用括号创建组。当您获得Match对象时,此对象将包含Group集合:

string input = "<html><img id=\"someImage\" src=\"C:\\logo.png\" height=\"64\" width=\"104\" alt=\"myImage\" /></html>";
var regex = new Regex("(<img(.+?)id=\"someImage\"(.+?))src=\"([^\"]+)\"");

string output = regex.Replace(
    input, 
    match => match.Groups[1].Value + "src=\"someothervalue\""
);

在上面的示例中,将有5个组:

  • Groups[0]这是整场比赛:<img id=\"someImage\" src=\"C:\\logo.png\"
  • Groups[1]这是src属性之前的所有内容:<img id=\"someImage\" 
  • Groups[2]Groups[3](.+?)部分。
  • Groups[4]src属性的原始值:C:\logo.png

在示例中,我将整个匹配替换为Groups[1]的值和新的src属性。

脚注:虽然正则表达式有时足以让作业操作html文档,但它通常不是最好的方法。如果您事先知道自己正在使用xhtml,则可以使用XmlDocument + XPath。如果是html,那么您可以使用HtmlAgilityPack