2008-11-18 445 views
7

我测试的像这样的字符串:正则表达式匹配HTML标签和提取文本

<customtag>hey</customtag> 

我想用正则表达式来修改“customtag”标记之间的文本,以便它可能是这样的:

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

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

+2

的[最佳答案](http://stackoverflow.com/a/1732454/80274)对这个问题迄今。 – 2012-02-18 00:37:06

回答

15

我不会用正则表达式要么对于这一点,但如果你必须在这个表达式应该工作: <customtag>(.+?)</customtag>

7

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


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

这与问题有什么关系?使用OP的问题的正则表达式,因为它是写作的作品,但如果标签之间的内容包含其他标签会怎么样?如果文字中出现文字<会怎么样? Jon Tackabury问了这个问题已经有11个月了,我猜那时候,他问题的复杂性可能会增加。

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

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

下面是关于如何使用XSL与C#一对夫妇的文章:

这里有几个关于如何使用DOM与C#的文章:

这是一个。

+0

那么,我偶尔会在受控环境中使用它们,并使用已知机器生成的代码进行快速的工作... – PhiLho 2008-11-18 20:46:10

+4

那么,为什么不告诉我们如何在C#中使用XSL或DOM呢?做清楚的陈述很容易。让我们看看实际的代码。正则表达式不适合解析一般的HTML,但它们完全适合用特定的HTML代码做特定的事情。 – 2008-11-19 07:31:55

1

如果帮助DOM和XSL操作上的HTML网络图书馆两个标签之间不会有任何其他标签,这个正则表达式更安全一些,更高效:

<customtag>[^<>]*</customtag> 
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,'');