我正在使用第三方工具生成HTML,如下所示[这只是一个带有较长页面的示例html,但模式相同]:
<P>
<SPAN>
<SPAN>This is </SPAN>
</SPAN>
<SPAN STYLE="font-weight:bold;">
<SPAN>some</SPAN>
</SPAN>
<SPAN>
<SPAN> text.</SPAN>
</SPAN>
</P>
我希望它更干净,如下所示[缩进无关紧要]:
<P>
This is <SPAN STYLE="font-weight:bold;">some</SPAN> text.
</P>
在Regex
之后输入标签之间的文字。例如,[span]some sample text[/span]
给了我some sample text
。但是,您可能已经注意到,我的上述情况有点复杂:
var s = "My temp folder is: [span]Path.GetTempPath()[/span]";
var result = Regex.Replace(s, @"\[span](.*?)\[/span]",
m =>
{
var codeString = m.Groups[1].Value;
// then you have to evaluate this string
return EvaluateMyCode(codeString)
});
答案 0 :(得分:0)
我以为我可能需要更多的步骤,因此我需要对变量进行命名,但是重复一种模式是可行的:
var p1 = new Regex(@"\s*<span>(?<text>.+?)</span>\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
var s1 = src;
while (s1.IsMatch(p1))
s1 = p1.Replace(s1, "${text}");
注意:如果模式正确,则可以通过在<span>
的开头和结尾添加量词来实现循环而不会循环:
var p1 = new Regex(@"(?:\s*<span>)+(?<text>.+?)(?:</span>\s*)+", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
var s1 = p1.Replace(src, "${text}");