C#Regex和批量替换

本文关键字:替换 C#Regex | 更新日期: 2023-09-27 18:25:08

ab:tag_x标记在字符串中多次出现。

标签格式:

<ab:tag_x contents="some text" src_id="some id">

如何用其中一个属性(contents)的值替换每个标记?

示例:

<ab:tag_x contents="some text1" src_id="some id"> -> some text1
<ab:tag_x contents="some text2" src_id="some id"> -> some text2

谢谢,LG

C#Regex和批量替换

可能需要一些抛光,但这是我得到的。

class Program
{
    static void Main()
    {
        string data = "<data><ab:tag_x contents='"some text1'" src_id='"some id'"><br/><ab:tag_x contents='"some text2'" src_id='"some id'"></data>";
        string pattern = "<ab:tag_x.*?contents='"(.*?)'".*?>";
        string replacement = "$1";
        string result = Regex.Replace(data, pattern, replacement);
        Console.WriteLine(result);
    }
}

要了解模式是如何工作或修改它的,请阅读这篇关于正则表达式语言的MSDN。

要了解替换字符串是如何工作或修改它的,请阅读此MSDN上的正则表达式替换。

HTH

我建议如下:

string result = Regex.Replace(myhtml, 
  "<ab:tagx[^>]+contents='"([^'"]*)'"[^>]*>'", 
  "$1");

这将处理:

  • contents属性之前的任意数量的属性
  • contents属性之后的任意数量的属性
  • 开始标记或自动关闭标记
  • 空白内容(contents=""
  • 标签中的LF字符(这就是我没有使用.*?的原因)

假设:

  • 属性值由双引号字符分隔
  • 等号周围没有空白字符
  • 标记和contents属性始终是小写的
  • 每个标记都包含contents属性,即使该值为空