正则表达式替换标记之前或c#中脚本标记中的文本之间的文本

时间:2010-10-29 05:15:56

标签: c# regex

在我的html内容中,我想用c#替换脚本标记之间存在的“italic”的所有“粗体”文本。

我在这里有两个选项来应用正则表达式 a)替换脚本标记之间的所有内容 b)在脚本标记结束之前替换所有

那么使用任何方法的正则表达式是什么?

1 个答案:

答案 0 :(得分:0)

像这样(未经测试!):

String pattern = Regex.Escape(@"<script>") + @"(?<inner_text>.*@)" + Regex.Escape(@"</script>");

Regex rx = new Regex(pattern);

foreach (Match m in rx.Matches(input))
{
    string captured = m.Groups["inner_text"];//maybe a .Value is missing?!
}
//OR:
rx.Replace(input,MyMatchEvaluator);

//...
string MyMatchEvaluator(Match m)
{
     return @"<script>" + MyTransformingFunction(m.Groups["inner_text"]) + @"</script>";
}

更新: 我把非贪婪的旗子弄错了。不知何故,我认为它是'@',但事实上它是'?'。固定模式:

String pattern = Regex.Escape(@"<script>") + @"(?<inner_text>.*?)" + Regex.Escape(@"</script>");

您可以将'*'替换为'+',以仅匹配非空脚本标记。

更新#2:由于VisualStudio正则表达式“查找”,'@'在我脑海中 - 这是VisualStudio的“在文件中查找”的非贪婪版本的'*'