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

本文关键字:内部 字符串 正则表达式 替换 何替换 | 更新日期: 2023-09-27 17:59:38

我有以下代码片段,搜索条件是找到所有具有id="someImage">值的img标签

<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" />

我如何使用正则表达式实现这一点。

谢谢。

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

您可以在正则表达式中使用组。通过在正则表达式中使用括号来创建组。获取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。

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

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

另一个是XmlReader。

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