RegEx匹配HTML标记并提取文本

时间:2008-11-18 20:01:54

标签: c# regex

我有一串这样的测试:

<customtag>hey</customtag>

我想使用RegEx修改“customtag”标签之间的文本,使其看起来像这样:

<customtag>hey, this is changed!</customtag>

我知道我可以使用MatchEvaluator来修改文本,但我不确定要使用正确的RegEx语法。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:15)

我不会为此使用正则表达式,但如果你必须这个表达式应该工作: <customtag>(.+?)</customtag>

答案 1 :(得分:7)

在使用正则表达式解析和修改HTML之前,我会自行解开自己的腿。

使用XSLDOM


有两条评论让我澄清。正则表达式替换在OP的问题的特定情况下起作用,但通常正则表达式不是一个好的解决方案。正则表达式可以匹配regular languages,即可以被有限状态机接受的输入序列。 HTML可以包含任意深度的嵌套标签,因此它不是常规语言。

这与这个问题有什么关系?在编写OP的问题时使用正则表达式可以正常工作,但如果<customtag>标记之间的内容包含其他标记会怎么样?如果文本中出现文字<字符怎么办?自从Jon Tackabury提出这个问题已经过去了11个月,我想在那个时候,他的问题的复杂性可能会增加。

正则表达式是很好的工具,我会一直使用它们。但是使用它们来代替真正的解析器以获得需要的输入只能在非常简单的情况下工作。这些案例实际上不可避免地超出了正则表达式所能处理的范围。当这种情况发生时,你会想要编写一个更复杂的正则表达式,但这些很快就变得非常费力,无法进行开发和调试。准备好在解析需求扩展时废弃正则表达式解决方案。

XSL和DOM是两种标准技术,旨在使用XML或XHTML标记。这两种技术都知道如何解析结构化标记文件,跟踪嵌套标记,并允许您转换标记属性或内容。

以下是一些关于如何在C#中使用XSL的文章:

以下是一些关于如何在C#中使用DOM的文章:

这是一个.NET库,可以帮助HTML上的DOM和XSL操作:

答案 2 :(得分:1)

如果两个标签之间没有任何其他标签,这个正则表达式会更安全一些,效率更高:

<customtag>[^<>]*</customtag>

答案 3 :(得分:0)

//This is to replace all HTML Text

var re = new RegExp("<[^>]*>", "g");

var x2 = Content.replace(re,"");

//This is to replace all &nbsp;

var x3 = x2.replace(/\u00a0/g,'');

答案 4 :(得分:0)

大多数人使用HTML Agility Pack进行HTML文本解析。但是,我发现它对我自己的需求有点强大和复杂。我在内存中创建一个Web浏览器控件,加载页面,然后从中复制文本。 (见下面的例子)

你可以在这里找到3个简单的例子:

http://jakemdrew.wordpress.com/2012/02/03/getting-only-the-text-displayed-on-a-webpage-using-c/