C# 正则表达式匹配HTML标记并提取文本

C# 正则表达式匹配HTML标记并提取文本,c#,regex,C#,Regex,我有一系列这样的测试: <customtag>hey</customtag> <customtag>hey, this is changed!</customtag> 嘿 我想使用正则表达式修改“customtag”标记之间的文本,使其看起来像这样: <customtag>hey</customtag> <customtag>hey, this is changed!</customtag>

我有一系列这样的测试:

<customtag>hey</customtag>
<customtag>hey, this is changed!</customtag>
我想使用正则表达式修改“customtag”标记之间的文本,使其看起来像这样:

<customtag>hey</customtag>
<customtag>hey, this is changed!</customtag>
嘿,这已经改变了!
我知道我可以使用MatchEvaluator来修改文本,但我不确定使用什么样的正则表达式语法。如果有任何帮助,我将不胜感激。

在使用正则表达式解析和修改HTML之前,我会自讨苦吃

使用或


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


这和这个问题有什么关系?在编写OP的问题时使用正则表达式是可行的,但是如果
标记之间的内容包含其他标记怎么办?如果一个literal
我也不会为此使用正则表达式,但如果您必须这样做,该怎么办

(.+?)

如果两个标记之间没有任何其他标记,则此正则表达式更安全、更高效:

<customtag>[^<>]*</customtag>
[^]*
//这将替换所有HTML文本
var re=新的RegExp(“]*>”,“g”);
var x2=内容。替换(重“”);
//这是为了取代所有
变量x3=x2。替换(/\u00a0/g,”);

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

您可以在这里找到3个简单的示例:


谢谢-这非常有效。通常我不会使用正则表达式来解析这样的HTML,但此HTML来自内部系统,并且格式正确。作为对其他人的警告:它无法处理格式正确的语法|某些文本|-管道符号之间的区域匹配,因此,第二个将被删除,留下格式错误的XML。是的,这就是为什么不应该尝试使用正则表达式解析XML。您可以限制标签之间的内容,只允许字母、数字和空格,这样效果会更好。但是它被限制在一个特定的领域,所以像这样:([a-zA-Z0-9])+或者([^好吧,我偶尔在受控环境中使用它们,使用已知一致的机器生成代码,以便快速完成任务……那么为什么不向我们展示如何在C#中使用XSL或DOM?很容易生成全面的语句。让我们看看实际的代码。正则表达式不适合解析一般HTML,但它们非常适合我承认你让我笑了,但是让我们来做一个解释,或者链接到一个很好的解释,解释为什么你宁愿咬断你的腿。我想这对一些程序员来说是很明显的原因,但对新手来说可能不是。到目前为止,这个问题的答案是。