我有以下代码段, 搜索条件是找到所有 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" />
如何使用正则表达式实现此目的。
谢谢。
答案 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。