我有一个这样的测试字符串:
<customtag>hey</customtag>
我想使用正则表达式来修改“customtag”标记之间的文本,使其看起来像这样:
<customtag>hey, this is changed!</customtag>
我知道可以使用MatchEvaluator来修改文本,但我不确定应该使用什么正则表达式语法。非常感谢您提供任何帮助。
我也不会为此使用正则表达式,但如果你必须使用,这个表达式应该可以工作:
<customtag>(.+?)</customtag>
在使用正则表达式解析和修改HTML之前,我宁愿咬掉自己的腿。
有两条评论要求我澄清。 正则表达式替换在OP问题的特定情况下有效,但通常来说,正则表达式不是一个好的解决方案。 正则表达式可以匹配正则语言,即可以被有限状态机接受的输入序列。 HTML可以包含任意深度的嵌套标签,因此它不是正则语言。
这与问题有什么关系? 在OP的问题中使用正则表达式是可行的,但是如果<customtag>
标记之间的内容包含其他标记怎么办? 如果文本中出现字面上的<
字符怎么办? Jon Tackabury提出问题已经11个月了,我猜在那段时间里,他的问题复杂性可能已经增加了。
正则表达式是很好的工具,我经常使用它们。 但是,在需要真正的解析器的输入中使用它们只适用于非常简单的情况。 这些情况几乎不可避免地会超出正则表达式的处理能力。 当发生这种情况时,您会尝试编写更复杂的正则表达式,但是这些很快就变得非常费力来开发和调试。 请准备好在解析要求扩展时放弃正则表达式解决方案。
XSL和DOM是两种标准技术,旨在与XML或XHTML标记一起使用。 这两种技术都知道如何解析结构化标记文件,跟踪嵌套标记,并允许您转换标记属性或内容。
以下是有关如何在C#中使用XSL的几篇文章:
以下是有关如何在C#中使用DOM的几篇文章:
这里有一个.NET库,可以帮助对HTML进行DOM和XSL操作:
<customtag>[^<>]*</customtag>
大多数人使用HTML Agility Pack进行HTML文本解析。然而,我发现它对我的需求来说有点复杂和繁琐。我在内存中创建一个Web浏览器控件,加载页面,并从中复制文本。(请参见下面的示例)
您可以在此处找到3个简单的示例:
http://jakemdrew.wordpress.com/2012/02/03/getting-only-the-text-displayed-on-a-webpage-using-c/
//This is to replace all HTML Text
var re = new RegExp("<[^>]*>", "g");
var x2 = Content.replace(re,"");
//This is to replace all
var x3 = x2.replace(/\u00a0/g,'');