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
可能需要一些抛光,但这是我得到的。
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
属性,即使该值为空