C#Regex和批量替换

时间:2012-02-18 23:56:14

标签: c# regex string

字符串中有几个ab:tag_x标记。

标记格式:

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

如何将每个标签替换为其中一个属性的值 - “内容”?

示例:

<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

2 个答案:

答案 0 :(得分:1)

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

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);
    }
}

要了解模式的工作原理或修改方式,请在Regular Expression Language上阅读此MSDN。

要了解替换字符串的工作原理或修改方式,请在Regular Expressions Substitutions上阅读此MSDN。

HTH

答案 1 :(得分:0)

我建议如下:

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

这将处理:

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

假设:

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